如何内爆二维数组中的子数组?
How to implode subarrays in a 2-dimensional array?
如果值是数组,我想将值内爆到逗号分隔的字符串中:
我有以下数组:
$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()
? ...但是我将不得不创建另一个函数。
只需将值附加到新数组:
$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);
以及可以称为 "one-liner"
的东西
$new_Array = array_reduce($my_array, function($t, $v) { $t[] = is_array($v) ? implode(",", $v) : $v; return $t; }, []);
现在比较两个解决方案并判断哪个更易读。
只需创建一个新数组并设置元素 (-;
<?php
...
$new_array = [];
foreach ($my_array as $key => $value)
$new_array[$key] = is_array($value) ? implode(",", $value) : $value;
如果您 type
将字符串(非数组)作为单元素数组,则不需要 write/iterate 条件语句。
与 array_map()
: (Demo)
$my_array = [
"keywords" => "test",
"locationId" => [ 0 => "1", 1 => "2"],
"industries" => "1"
];
var_export(
array_map(
function($v) {
return implode(',', (array)$v);
},
$my_array
)
);
或来自PHP7.4, array_map()
带箭头函数语法:(Demo)
var_export(
array_map(fn($v) => implode(',', (array)$v), $my_array)
);
或array_walk()
并参考修改(Demo)
array_walk(
$my_array,
function(&$v) {
$v = implode(',', (array)$v);
}
);
var_export($my_array);
或者 foreach 循环:(Demo)
foreach ($my_array as &$v) {
$v = implode(',', (array)$v);
}
var_export($my_array);
所有片段将输出:
array (
'keywords' => 'test',
'locationId' => '1,2',
'industries' => '1',
)
如果值是数组,我想将值内爆到逗号分隔的字符串中:
我有以下数组:
$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()
? ...但是我将不得不创建另一个函数。
只需将值附加到新数组:
$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);
以及可以称为 "one-liner"
的东西$new_Array = array_reduce($my_array, function($t, $v) { $t[] = is_array($v) ? implode(",", $v) : $v; return $t; }, []);
现在比较两个解决方案并判断哪个更易读。
只需创建一个新数组并设置元素 (-;
<?php
...
$new_array = [];
foreach ($my_array as $key => $value)
$new_array[$key] = is_array($value) ? implode(",", $value) : $value;
如果您 type
将字符串(非数组)作为单元素数组,则不需要 write/iterate 条件语句。
与 array_map()
: (Demo)
$my_array = [
"keywords" => "test",
"locationId" => [ 0 => "1", 1 => "2"],
"industries" => "1"
];
var_export(
array_map(
function($v) {
return implode(',', (array)$v);
},
$my_array
)
);
或来自PHP7.4, array_map()
带箭头函数语法:(Demo)
var_export(
array_map(fn($v) => implode(',', (array)$v), $my_array)
);
或array_walk()
并参考修改(Demo)
array_walk(
$my_array,
function(&$v) {
$v = implode(',', (array)$v);
}
);
var_export($my_array);
或者 foreach 循环:(Demo)
foreach ($my_array as &$v) {
$v = implode(',', (array)$v);
}
var_export($my_array);
所有片段将输出:
array (
'keywords' => 'test',
'locationId' => '1,2',
'industries' => '1',
)