代码之家  ›  专栏  ›  技术社区  ›  Sakhri Houssem

从多维数组递归到一维数组

  •  0
  • Sakhri Houssem  · 技术社区  · 7 年前

    $liste = [[1,2,3],5,[['x','y','z'],true]];
    

    我想把它改成一维数组

    $liste = [1,2,3,5,'x','y','z',true];
    

    所以我总是有一个问题,给我同样的形状

    function to_array($list){
        $out=[];
        if(!is_array($list)){
            return $list;
        }else{
            foreach($list as $line){
                $out[]= to_array($line);
            }
        }
        return $out;
    }
    

    这个递归函数的问题在哪里!!!

    2 回复  |  直到 7 年前
        1
  •  1
  •   Nick SamSmith1986    7 年前

    您的代码的问题是您正在推送 to_array $out ,当您要做的是使用 array_merge . 既然这要求两个参数都是数组 $list 不是数组,需要返回包含单个值的数组。因此,请更改这些行:

        return $list;
            $out[]= to_array($line);
    

    收件人:

        return array($list);
            $out = array_merge(to_array($line));
    

    function to_array($list){
        $out=[];
        if(!is_array($list)){
            return array($list);
        }else{
            foreach($list as $line){
                $out = array_merge($out, to_array($line));
            }
        }
        return $out;
    }
    

    你会得到你想要的结果:

    var_export(to_array($liste));
    

    输出:

    array (
      0 => 1,
      1 => 2,
      2 => 3,
      3 => 5,
      4 => 'x',
      5 => 'y',
      6 => 'z',
      7 => true,
    )
    
        2
  •  1
  •   mickmackusa Tom Green    7 年前

    array_walk_recursive()

    数组\u walk\u recursive() true | false 根据是否有故障。

    &$flat 是一个“通过引用传递”的变量。这意味着 $flat 可以作为一个载体将数据从功能范围内传输到功能范围外。在遍历元素时,每个新值都被推入 $平 使用方括号语法。

    这正是这个函数最擅长的——使用它。

    代码:( Demo

    $liste = [[1, 2, 3], 5, [['x', 'y', 'z'], true]];
    array_walk_recursive($liste, function($v) use (&$flat){ $flat[] = $v; });
    var_export($flat);
    

    array (
      0 => 1,
      1 => 2,
      2 => 3,
      3 => 5,
      4 => 'x',
      5 => 'y',
      6 => 'z',
      7 => true,
    )