Necesito dividir mi entrada de cadena en una matriz en las comas.
¿Cómo puedo lograr esto?
Entrada:
9,admin@example.com,8
Necesito dividir mi entrada de cadena en una matriz en las comas.
¿Cómo puedo lograr esto?
9,admin@example.com,8
Respuestas:
Intenta explotar :
$myString = "9,admin@example.com,8";
$myArray = explode(',', $myString);
print_r($myArray);
Salida:
Array
(
[0] => 9
[1] => admin@example.com
[2] => 8
)
var_dump
que proporciona información más detallada. Aún más útil es var_export($myArray, true)
porque devuelve la salida de var_dump
como una cadena para que pueda almacenarlo en algún registro sin romper el sitio generado ...
$myString = "9,admin@example.com,8";
$myArray = explode(',', $myString);
foreach($myArray as $my_Array){
echo $my_Array.'<br>';
}
Salida
9
admin@example.com
8
$string = '9,admin@google.com,8';
$array = explode(',', $string);
Para situaciones más complicadas, es posible que deba usar preg_split
.
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.
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>
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
)
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.
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 : []));
}