PHP 删除无用的嵌套数组
PHP remove useless nested array
我正在使用生成以下数组的 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 下有 children。它包含一个无用的数组 (0 => array: 2).
是否可以删除这些无用的数组?我真的需要它来重新生成我的菜单项位置...有什么想法吗?
您可以使用递归算法:
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;
}
查看有效代码 here。
您可以像这样在循环中执行此操作:
ALGORITHM:
<?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)
找到快速测试 Here。
我正在使用生成以下数组的 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 下有 children。它包含一个无用的数组 (0 => array: 2).
是否可以删除这些无用的数组?我真的需要它来重新生成我的菜单项位置...有什么想法吗?
您可以使用递归算法:
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;
}
查看有效代码 here。
您可以像这样在循环中执行此操作:
ALGORITHM:
<?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)
找到快速测试 Here。