如何在二维数组中内爆子阵列?

时间:2017-07-22 10:54:55

标签: php multidimensional-array implode

如果它们是一个数组,我想将值内插到以逗号分隔的字符串中:

我有以下数组:

$my_array = [
    "keywords" => "test",
    "locationId" => [ 0 => "1", 1 => "2"],
    "industries" => "1"
];

为实现这一点,我有以下代码:

foreach ($my_array as &$value)
    is_array($value) ? $value = implode(",", $value) : $value;
unset($value);

以上也将改变原始数组。有没有更优雅的方法来创建一个与上面相同的新数组?

我的意思是,如果它们是一行代码中的数组,则会破坏值?也许array_map()? ......但是我必须创建另一个函数。

3 个答案:

答案 0 :(得分:0)

只需将值附加到新数组:

$my_array = [
   "keywords" => "test",
   "locationId" => [ 0 => "1", 1 => "2"],
   "industries" => "1",
];
$new_Array = [];
foreach ($my_array as $value) {
    $new_Array[] = is_array($value) ? implode(",", $value) : $value;
}
print_r($new_Array);

可以称之为"单线"

$new_Array = array_reduce($my_array, function($t, $v) { $t[] = is_array($v) ? implode(",", $v) : $v; return $t; }, []);

现在比较两种解决方案并告诉哪些解决方案更具可读性。

答案 1 :(得分:0)

只需创建一个新数组并设置元素( - ;

<?php
...
$new_array = [];
foreach ($my_array as $key => $value)
     $new_array[$key] = is_array($value) ? implode(",", $value) : $value;

答案 2 :(得分:0)

如果您在将字符串(非数组)type作为单元素数组进行插入之前,则不需要编写/迭代条件语句。

代码:(Demo

$my_array = [
    "keywords" => "test",
    "locationId" => [ 0 => "1", 1 => "2"],
    "industries" => "1"
];

var_export(array_map(function($v){return implode(',',(array)$v);},$my_array));

输出:

array (
  'keywords' => 'test',
  'locationId' => '1,2',
  'industries' => '1',
)

或者如果您更喜欢foreach循环,这将提供相同的结果:

foreach($my_array as $k=>$v){
    $result[$k]=implode(',',(array)$v);
}
var_export($result);