Как сгладить и отсортировать многомерный массив, содержащий числа и подмассивы чисел?

Мне нужна помощь в сортировке многомерного массива, состоящего из числовых строк и массивов числовых строк.

Вот мой код:

$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];
}

1

Решение

Я надеюсь, что вы хотите так: —

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

0

Другие решения

Это МНОГО более чистый путь без условий и без вложенных циклов 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>
1

По вопросам рекламы [email protected]