如果它们是一个数组,我想将值内插到以逗号分隔的字符串中:
我有以下数组:
$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()
? ......但是我必须创建另一个函数。
答案 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);