代码之家  ›  专栏  ›  技术社区  ›  jompom

如何对包含数字和数字子阵列的多维数组进行展平和排序?

  •  1
  • jompom  · 技术社区  · 7 年前

    我需要帮助排序由数字字符串和数字字符串数组组成的多维数组。

    这是我的代码:

    $array =  array();
    $multi= array(
                  10,
                  9,
                  array(5,4),
                  array(6,7),
                  array(3,2),
                  array(8,1)
            );
    
    foreach ($multi as $value) {
        if (is_numeric($value)) {
            array_push($array, $value);
        }
        if (is_array($value)) {
            array_push($array, $value);
        }
    }
    sort($array);
    for ($i=0; $i <count($array) ; $i++) { 
        echo $array[$i];
    }
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   mickmackusa Tom Green    7 年前

    这是一个 很多 更简洁的方式,没有条件和嵌套的foreach循环。 array_walk_recursive() 只对“叶节点”进行交互,这样就不需要检查某个对象是否是数组并运行内部foreach循环。

    代码:( Demo

    $multi=[10,9,[5,4],[6,7],[3,2],[8,1]];
    array_walk_recursive($multi,function($v)use(&$flat){$flat[]=$v;});
    sort($flat);
    var_export($flat);
    

    输出:

    array (
      0 => 1,
      1 => 2,
      2 => 3,
      3 => 4,
      4 => 5,
      5 => 6,
      6 => 7,
      7 => 8,
      8 => 9,
      9 => 10,
    )
    

    判断依据 your earlier closed question ,您将希望使用此完整方法:

    代码:( Demo

    $multi=[10,9,[5,4],[6,7],[3,2],[8,1]];                               // declare multi-dim array
    array_walk_recursive($multi,function($v)use(&$flat){$flat[]=$v;});   // store values
    sort($flat);                                                         // sort
    
    echo '<center>',implode('</center><br><center>',$flat),'</center>';  // display
    
    // this will generate a trailing <br> tag that you may not wish to have:
    /*
    foreach($flat as $v){
        echo "<center>$v</center><br>";
    }
    */
    

    未渲染的HTML输出:

    <center>1</center><br>
    <center>2</center><br>
    <center>3</center><br>
    <center>4</center><br>
    <center>5</center><br>
    <center>6</center><br>
    <center>7</center><br>
    <center>8</center><br>
    <center>9</center><br>
    <center>10</center>
    
        2
  •  0
  •   Death-is-the-real-truth    7 年前

    foreach ($multi as $value) {
        if (is_numeric($value)) {
            $array[] =  $value;
        }if (is_array($value)) {
            foreach($value as $val){
                $array[] =  $val;
            }
        }
    }
    sort($array);
    print_r($array);
    

    https://eval.in/848749