I need to split my string input into an array at the commas.
Is there a way to explode a comma-separated string into a flat, indexed array?
Input:
9,[email protected],8
Output:
['9', 'admin@example', '8']
I need to split my string input into an array at the commas.
Is there a way to explode a comma-separated string into a flat, indexed array?
Input:
9,[email protected],8
Output:
['9', 'admin@example', '8']
Try explode:
$myString = "9,[email protected],8";
$myArray = explode(',', $myString);
print_r($myArray);
Output :
Array
(
[0] => 9
[1] => [email protected]
[2] => 8
)
var_dump
which gives more detailed information. Even more usefull is var_export($myArray, true)
because it returns the output of var_dump
as a string so you can store it in some log without breaking generated site... –
Ennis $string = '9,[email protected],8';
$array = explode(',', $string);
For more complicated situations, you may need to use preg_split
.
If that string comes from a csv file, I would use fgetcsv()
(or str_getcsv()
if you have PHP V5.3). That will allow you to parse quoted values correctly. If it is not a csv, explode()
should be the best choice.
What if you want your parts to contain commas? Well, quote them. And then what about the quotes? Well, double them up. In other words:
part1,"part2,with a comma and a quote "" in it",part3
PHP provides the https://php.net/str_getcsv function to parse a string as if it were a line in a CSV file which can be used with the above line instead of explode
:
print_r(str_getcsv('part1,"part2,with a comma and a quote "" in it",part3'));
Array
(
[0] => part1
[1] => part2,with a comma and a quote " in it
[2] => part3
)
explode
has some very big problems in real life usage:
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
this is why i prefer preg_split
preg_split('@,@', $string, NULL, PREG_SPLIT_NO_EMPTY)
the entire boilerplate:
/** @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 : []));
}
explode()
. I would not put this in any professional script. If it is possible for your incoming string to be empty, then write a simple falsey check before exploding instead of using a preg_
call containing a literal character. If a string might have a trailing delimiter and you don't want that, then just rtrim()
the delimiter off -- again, no reason to lean on regex (and I love regex). –
Curnin Use explode() or preg_split() function to split the string in php with given delimiter
// Use preg_split() function
$string = "123,456,78,000";
$str_arr = preg_split ("/\,/", $string);
print_r($str_arr);
// use of explode
$string = "123,46,78,000";
$str_arr = explode (",", $string);
print_r($str_arr);
preg_split()
with a literal character is an inappropriate usage of regex and will only mean needless processing overhead. I would not recommend the first technique to any researcher. As for the explode()
this insight was already offered years earlier. This answer can be safely deleted. –
Curnin If anyone wants to convert comma seprated string into a list item using for-each then it will help you ... This code is for blade template
@php
$data = $post->tags;
$sep_tag= explode(',', $data);
@endphp
@foreach ($sep_tag as $tag)
<li class="collection-item">{{ $tag}}</li>
@endforeach
There may be spaces between commas. Also there may be no useful data between commas. Function preg_split will help to handle these cases:
$str = "1,2 , ,4, ";
$arr = preg_split("/\s*,\s*/", $str, -1, PREG_SPLIT_NO_EMPTY);
print_r($arr); // [1, 2, 4]
//Re-usable function
function stringToArray($stringSeperatedCommas)
{
return collect(explode(',', $stringSeperatedCommas))->map(function ($string) {
return trim($string) != null ? trim($string) : null;
})->filter(function ($string) {
return trim($string) != null;
});
}
//Usage
$array = stringToArray('abcd, , dsdsd, dsds');
print($array);
//Result
{ "abcd", "dsdsd", "dsds" }
collect()
supposed to be? You are sharing unusable code. Downvoted. –
Selfdetermination © 2022 - 2024 — McMap. All rights reserved.
preg_split('/[-,\s]+/', 'Split-this, by dash comma and space');
for example – Cramped