在这里我有一个多维数组,使用这个数组我必须合并单个数组,我已经尝试在我的观点我必须使用三个foreach循环然后我必须推动一个数组,但我担心的是,如果我使用foreach循环意味着我的性能会降低,任何一个更新我的代码都没有为每个循环或简化的代码
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"
)
我曾尝试过以下
<?php
$array = Array
(
"100" => Array
(
"class 1" => Array
(
"0" => "ABC",
"1" => "CDE"
),
"class 2" => Array
(
"0" => "F"
)
),
"200" => Array
(
"class 3" => Array
(
"0" => "G"
)
)
);
foreach($array as $firstKey => $firstVal){
$mainArray[] = $firstKey;
foreach($firstVal as $secondKey => $secondVal){
foreach($secondVal as $thiredKey => $thiredVal){
$mainArray[] = $thiredVal;
}
}
}
echo "<pre>";
print_r($mainArray);
?>
使用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
您可以像这样展平多维数组
$result = array();
array_walk_recursive($original_array, function($v) use (&$result){
$result[] = $v;
});
如您所见,您的数组将被处理为闭包/匿名函数,并将其作为最终结果展平。
你可以通过使用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);