Мне нужна помощь в сортировке многомерного массива, состоящего из числовых строк и массивов числовых строк.
Вот мой код:
$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];
}
Я надеюсь, что вы хотите так: —
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
Это МНОГО более чистый путь без условий и без вложенных циклов foreach. array_walk_recursive()
только включает «лист-узлы», поэтому вам не нужно проверять, является ли что-то массивом, и запускать внутренний цикл foreach.
Код: (демонстрация)
$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,
)
Судя по ваш ранее закрытый вопрос, вы хотите использовать этот полный метод:
Код: (демонстрация)
$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>