如何在逗号上拆分数组字符串并创建一个维护顺序的新数组?

How to split array strings on comma and create a new array maintaining order?

基本上我想拆分包含逗号的数组元素,并保留数组中的元素顺序。

所以我有这样一个元素:

$array = ["coke", "joke", "two,parts", "smoke"];

而且我想把它找到带逗号的那个,用逗号把它分成两个单独的元素,然后保持秩序,就好像什么都没发生过一样。

这是想要的结果:

$array = ["coke", "joke", "two", "parts", "smoke"];

创建具有固定值的新数组。然后遍历原始数组并分解每个元素并将其附加到新数组。

希望这会有所帮助,这里我们使用 foreachexplode 来实现所需的输出。

Try this code snippet here

<?php
ini_set('display_errors', 1);
$array = ["coke", "joke", "two,parts", "smoke"];
$result=array();
foreach($array as $value)
{
    if(stristr( $value,","))
    {
        $result=  array_merge($result,explode(",",$value));
    }
    else
    {
        $result[]=$value;
    }
}
print_r($result);

简短而贴心:让我们使用 array_reduce() 并将数组 减少 为数组:

$arr = ["coke", "joke", "two,parts", "smoke"];
function filter($v1,$v2)
{
   return array_merge($v1,explode(',',$v2)); 
}
print_r(array_reduce($arr,"filter",[]));

不需要显式迭代或临时变量!

这是最短、最甜蜜的方法。只需将所有元素连接成逗号分隔的字符串,然后将每个逗号上的字符串拆分回数组。

这将是最有效的方法,因为它总共不会进行超过两次的函数调用。其他答案在输入数组的每次迭代中使用一个或多个函数调用,这只会减慢过程。

此外,在逗号上使用不区分大小写的 strstr() 调用没有逻辑意义。 PHP手册甚至有一个特别的注意事项,说不要使用strstr()进行找针。

代码:(Demo)

$array = ["coke", "joke", "two,parts", "smoke"];
var_export(explode(',', implode(',', $array)));

输出:

array (
  0 => 'coke',
  1 => 'joke',
  2 => 'two',
  3 => 'parts',
  4 => 'smoke',
)