¿Cómo puedo dividir una cadena delimitada por comas en una matriz en PHP?


263

Necesito dividir mi entrada de cadena en una matriz en las comas.

¿Cómo puedo lograr esto?

Entrada:

9,admin@example.com,8

8
Solo una nota, la gente te está rechazando debido a la cantidad mínima de información y preguntas mal formuladas.
Troggy

@Troggy - durante mi edición que se propuso cambiar a Inglés legibles, pero luego me di cuenta de que sería probable que sólo sea un duplicado de muchas otras preguntas
John Rasch

3
Ninguna pregunta es demasiado básica, pero puede considerar echar un vistazo a las funciones del controlador de cadenas. No porque sea una mala pregunta, pero encontrar algo en los documentos se siente bien y, a veces, más rápido.
Csaba Kétszeri

Respuestas:


553

Intenta explotar :

$myString = "9,admin@example.com,8";
$myArray = explode(',', $myString);
print_r($myArray);

Salida:

Array
(
    [0] => 9
    [1] => admin@example.com
    [2] => 8
)

1
¿Cómo puedes contar? .lengh?
entrega el

2
Una forma es usar count () (también conocido como sizeof) - php.net/manual/en/function.count.php
Matthew Groves

2
@McLosysCreative También puede que le guste lo var_dumpque proporciona información más detallada. Aún más útil es var_export($myArray, true)porque devuelve la salida de var_dumpcomo una cadena para que pueda almacenarlo en algún registro sin romper el sitio generado ...
Tomasz Kapłoński

58
$myString = "9,admin@example.com,8";
$myArray = explode(',', $myString);
foreach($myArray as $my_Array){
    echo $my_Array.'<br>';  
}

Salida

9
admin@example.com
8

1
Su ciclo al final no se relacionó directamente con la pregunta, pero fue relevante para mi problema. ¡Gracias por esto!
Jesse Steele

34
$string = '9,admin@google.com,8';
$array = explode(',', $string);

Para situaciones más complicadas, es posible que deba usar preg_split.


30

Si esa cadena proviene de un archivo csv, usaría fgetcsv()(o str_getcsv()si tiene PHP V5.3). Eso le permitirá analizar los valores cotizados correctamente. Si no es un csv, explode()debería ser la mejor opción.


2

Código:

$string = "9,admin@example.com,8";

$array  = explode(",", $string);

print_r($array);

$no = 1;
foreach ($array as $line) {
    echo $no . ". " . $line . PHP_EOL;
    $no++;
};

En línea:

body, html, iframe { 
  width: 100% ;
  height: 100% ;
  overflow: hidden ;
}
<iframe src="https://ideone.com/pGEAlb" ></iframe>


0

De manera simple puedes ir con explode($delimiter, $string);

Pero de manera amplia, con la programación manual:

        $string = "ab,cdefg,xyx,ht623";
        $resultArr = [];
        $strLength = strlen($string);
        $delimiter = ',';
        $j = 0;
        $tmp = '';
        for ($i = 0; $i < $strLength; $i++) {
            if($delimiter === $string[$i]) {
                $j++;
                $tmp = '';
                continue;
            }
            $tmp .= $string[$i];
            $resultArr[$j] = $tmp;
        }

Salida: print_r($resultArr);

Array
(
    [0] => ab
    [1] => cdefg
    [2] => xyx
    [3] => ht623
)

0

La mejor opción es usar la función "explotar ()".

$content = "dad,fger,fgferf,fewf";
$delimiters =",";
$explodes = explode($delimiters, $content);

foreach($exploade as $explode) {
    echo "This is a exploded String: ". $explode;
}

Si desea un enfoque más rápido, puede usar una herramienta de delimitador como Delimiters.co Hay muchos sitios web como este. Pero prefiero un código PHP simple.


0

explode tiene algunos problemas muy grandes en el uso de la vida real:

count(explode(',', null)); // 1 !! 
explode(',', null); // [""] not an empty array, but an array with one empty string!
explode(',', ""); // [""]
explode(',', "1,"); // ["1",""] ending commas are also unsupported, kinda like IE8

por eso prefiero preg_split

preg_split('@,@', $string, NULL, PREG_SPLIT_NO_EMPTY)

la caldera completa:

/** @brief wrapper for explode
 * @param string|int|array $val string will explode. '' return []. int return string in array (1 returns ['1']). array return itself. for other types - see $as_is
 * @param bool $as_is false (default): bool/null return []. true: bool/null return itself.
 * @param string $delimiter default ','
 * @return array|mixed
 */
public static function explode($val, $as_is = false, $delimiter = ',')
{
    // using preg_split (instead of explode) because it is the best way to handle ending comma and avoid empty string converted to ['']
    return (is_string($val) || is_int($val)) ?
        preg_split('@' . preg_quote($delimiter, '@') . '@', $val, NULL, PREG_SPLIT_NO_EMPTY)
        :
        ($as_is ? $val : (is_array($val) ? $val : []));
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.