如何从二维数组中提取所有二级值(叶节点)并用逗号连接? [重复]

问题描述 投票:0回答:9

如何从数组中获取值列表:

[data] => Array
        (
            [5] => Array
                (
                    [0] => 19
                    [1] => 18
                    [2] => 20
                )

            [6] => Array
                (
                    [0] => 28
                )

        )

预期输出结果字符串为:19,18,20,28

谢谢!

php multidimensional-array
9个回答
11
投票

一根线,不循环。

echo implode(',', call_user_func_array('array_merge', $data));

尝试一下这里


4
投票

使用以下 php 代码:

$temp = array();
foreach($data as $k=>$v){
    if(is_array($v)){
        foreach($v as $key=>$value){
            $temp[] = $value;
        }
    }
}
echo implode(',',$temp);

0
投票

使用以下代码。

$string = '';
foreach($yourarray as $k){
  foreach($k as $l){
     $string. = $l.",";
  }
}

0
投票

只需循环子数组即可。将值存储到 $result 数组,然后使用 , implode

$result = array();
foreach ($data as $subArray) {
    foreach ($subArray as $value) {
        $result[] = $value;
    }
}
echo implode(',', $result);

0
投票
$data = array(5 => array(19,18,20), 6 => array(28));
foreach ($data as $array) {
    foreach ($array as $array1) {
        echo $array1.'<br>';
    }
}

试试这个。对你有帮助


0
投票

由于您希望定位的所有数据都是“叶节点”,因此

array_walk_recursive()
是一个方便调用的函数。

代码:(演示

$data=[5=>[19,18,20],6=>[28]];
array_walk_recursive($data,function($v){static $first; echo $first.$v; $first=',';});

输出:

19,18,20,28

此方法使用

static
声明来避免内爆调用,并且仅在第一次迭代后使用前面的逗号迭代
echo
的调用。 (没有生成临时数组)


0
投票

我还没有真正花时间考虑任何边缘情况,但这是一种非正统的方法,它将直接提供所需的输出字符串,而不需要循环,甚至生成一个新的临时数组。这是一个整洁的小单行,带有一点正则表达式的魔力。 (正则表达式演示)它有效地删除了所有方括号和大括号以及带有尾随冒号的双引号键。

代码:(演示

$data=[5=>[19,18,20],6=>[28]];
echo preg_replace('/[{}[\]]+|"\d+":/','',json_encode($data));

输出:

19,18,20,28

说得清楚/诚实,这是一个有点hacky的解决方案,但我认为对于SO研究人员来说,看到通常有多种方法可以实现任何给定的结果是有好处的。


0
投票

尝试这个..

foreach($data as $dataArr){
    foreach ($subArray as $value) {
        $res[] = $value;
    }
}
echo implode(',', $res);

-2
投票

只需使用嵌套的 foreach 语句

$values = array(); 
foreach($dataArray as $key => $subDataArray) {
   foreach($subDataArray as $value) {
       $values[] = $value;
   }
}
$valueString = implode(',', $values);

编辑:添加了完整的解决方案..

© www.soinside.com 2019 - 2024. All rights reserved.