如何将多维数组值推入单个数组

时间:2018-09-19 05:17:09

标签: php arrays multidimensional-array

这里我有一个多维数组,使用此数组我必须合并单个数组,以我的观点尝试过,我必须使用三个foreach循环,然后我必须推入一个数组,但我担心是如果我使用foreach循环意味着我的性能会降低,那么任何人都不会为每个循环或简化的代码更新我的代码

server {
        listen 80;

        root /var/www/test.com/html;
        index index.html index.htm index.nginx-debian.html;

        server_name test.com ;

        location / {

        }
}
  

预期产量

My Array



 Array
(
    "100" => Array
        (
            "class 1" => Array
                (
                    "0" => "ABC"
                    "1" => "CDE"
                )

            "class 2" => Array
                (
                    "0" => "F"
                )
        )

    "200" => Array
        (
            "class 3" => Array
                (
                    "0" => "G"
                )
        )

      )
  

我尝试过如下操作

 Array
(
 "0" => "100"
 "1" => "ABC"
 "2" => "CDE"
 "3" => "F"
 "4" => "200"
 "5" => "G"
)

3 个答案:

答案 0 :(得分:2)

使用foreach()

$final_array = array();

foreach($array as $key=>$arr){ // apply foreach on initial array

    $final_array[] = $key; // assign key first

    foreach($arr as $ar){ // now child is also array so iterate over it

        $values = array_values($ar); // get all values of child array

        foreach($values as $val){ // iterate over child array values

            $final_array[] = $val; //assign them one-by-one

        }

    }

}

print_r($final_array);// print final array

输出:-https://eval.in/1058692

没有foreach()

$result = array();
array_walk($original_array, function($item,$key) use (&$result){
   $result[] = $key;
   array_walk_recursive($item, function($v) use (&$result){ 
     $result[] = $v; 
   });
});
print_r($result );

输出:-https://3v4l.org/ECgdu

答案 1 :(得分:0)

您可以像这样平整多维数组

$result = array();
array_walk_recursive($original_array, function($v) use (&$result){ 
   $result[] = $v; 
});

如您所见,您的数组将被处理为闭包/匿名函数,并将其扁平化为最终结果。

答案 2 :(得分:0)

通过使用foreach()for(),无需使用array_walk()array_walk_recursive()循环就可以实现这一目标。

这是代码;

// Your input array
$input = array (
    100 => array(
        "class 1" => array("ABC", "CDE"),
        "class 2" => array("F")
    ),
    200 => array(
        "class 3" => array("G")
    )
);

$result = array();
array_walk($input, function($val, $key) use (&$result){
    $result[] = $key;
    array_walk_recursive($val, function($v, $k) use (&$result){
        $result[] = $v;
    });
});
// Your result
echo "<pre>";
print_r($result);