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

时间:2017-07-01 09:57:25

标签: php arrays csv delimiter substring

基本上我想分割一个数组元素,如果它包含一个逗号,并保留数组中的元素顺序。

所以我有一个像这样的元素:

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

我想让它找到带有逗号的那个,用逗号分成两个独立的元素并保持顺序,好像什么也没发生过一样。

这是理想的结果:

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

4 个答案:

答案 0 :(得分:3)

希望这会有所帮助,我们正在使用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);

答案 1 :(得分:2)

简短而甜蜜:让我们使用array_reduce()将数组简化添加到数组中:

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

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

答案 2 :(得分:1)

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

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

此外,对逗号使用不区分大小写的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',
)

答案 3 :(得分:-2)

创建具有固定值的新数组。然后迭代原始数组并爆炸每个元素并将其附加到新数组。