php 如何在二维数组中内聚子数组?

zengzsys  于 2022-10-30  发布在  PHP
关注(0)|答案(4)|浏览(202)

如果值是数组,我想将它们内爆成逗号分隔的字符串:
我有下面的数组:

$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())......但这样我就必须创建另一个函数。

pieyvz9o

pieyvz9o1#

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

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

hfyxw5xn2#

仅将值追加到新数组:

$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; }, []);

现在比较两个解决方案,并告诉谁更可读。

qaxu7uf2

qaxu7uf23#

如果在将字符串(非数组)内爆之前将其作为单元素数组进行type,则不需要编写/迭代条件语句。
对于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',
)
bogh5gae

bogh5gae4#

$arr = array( 'key1' => array( 'one', 'key2' => array( 'two', 
'three' ) ), 'four', 'five' );
$finalData = [];
array_walk_recursive(
    $arr,
    function( $subArr ) use ( &$finalData ) {
            $finalData[] = $subArr;
    }
);
$str = is_array( $finalData ) ? implode( ",", $finalData ) : $finalData;
print_r( $str ); // one,two,three,four,five

相关问题