我需要帮助排序由数字字符串和数字字符串数组组成的多维数组。
这是我的代码:
$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];
}
答案 0 :(得分:1)
这是一种 MUCH 更干净的方式,没有条件,也没有嵌套的foreach循环。 array_walk_recursive()
只会对&#34; leaf-nodes&#34;进行交互。所以你不需要检查某些东西是否是一个数组并运行一个内部的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>
答案 1 :(得分:0)
我希望你这样想: -
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