PHP удалить ненужный вложенный массив

Я использую плагин jQuery, который генерирует следующий массив:

    array:4 [
0 => array:1 [
"page_id" => "1"]
1 => array:2 [
"page_id" => "2""children" => array:1 [
0 => array:2 [
0 => array:2 [
"page_id" => "10""children" => array:1 [
0 => array:2 [
0 => array:1 [
"page_id" => "12"]
1 => array:1 [
"page_id" => "13"]
]
]
]
1 => array:1 [
"page_id" => "11"]
]
]
]
2 => array:1 [
"page_id" => "4"]
3 => array:1 [
"page_id" => "3"]
]

Этот массив является динамическим, поэтому может быть больше вложенных массивов. Мне нужно немного очистить массив. Как вы можете видеть под page_id => 2 есть дети. Он содержит один бесполезный массив (0 => массив: 2).

Можно ли убрать этот бесполезный массив? Мне действительно нужно, чтобы восстановить позиции пунктов меню … Есть идеи?

-1

Решение

Вы можете использовать рекурсивный алгоритм:

function removeUselessArrays($array) {
$newArray = [];

foreach ($array as $key => $value) {
if (is_array($value)) {
if (array_keys($value) === [ 0 ]) {
$newArray[$key] = removeUselessArrays($value[0]);
} else {
$newArray[$key] = removeUselessArrays($value);
}
} else {
$newArray[$key] = $value;
}
}

return $newArray;
}

Смотрите код работает Вот.

1

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

Вы можете сделать это из цикла следующим образом:

АЛГОРИТМ:

<?php

foreach($arr as $key=>$val){
foreach($val as $index=>$item){
if( is_array($item) ){
$children               = ["page_id"=>$item[0]["page_id"]];
$children               = array_merge($children, $item[0][$index]);
$arr[$key][$index]      = $children;
}
}
}

ТЕСТОВОЕ ЗАДАНИЕ

    <?php

// LOOP THROUGH THE ARRAY CONTAINING UNWANTED ELEMENT(S)
foreach($arr as $key=>$val){
foreach($val as $index=>$item){
// CHECK IF ONE OF THE SUB-ELEMENTS IS AN ARRAY & HAS KEY: children
if( is_array($item) ){
// IF SO; GET THE CHILDREN ELEMENT OFF THAT ITEM
// AND STORE IT IN A VARIABLE...
$children               = $item[0][$index];
// NOW SET THE SUB-ELEMENT TO THE $children
$children               = ["page_id"=>$item[0]["page_id"]];
$children               = array_merge($children, $item[0][$index]);
$arr[$key][$index]      = $children;
}
}
}

// DUMP-OUT THE OUTPUT:
var_dump($arr);

// PRODUCES:::
array (size=4)
0 =>
array (size=1)
'page_id' => string '1' (length=1)
1 =>
array (size=2)
'page_id' => string '2' (length=1)
'children' =>
array (size=3)
'page_id' => string '10' (length=1)
0 =>
array (size=1)
'page_id' => string '12' (length=1)
1 =>
array (size=1)
'page_id' => string '13' (length=1)
2 =>
array (size=1)
'page_id' => string '4' (length=1)
3 =>
array (size=1)
'page_id' => string '3' (length=1)

Быстрый тест найден Вот.

0

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