问题
I have a piece of multidimensional array output like this:
Array
(
[0] => Array
(
[item] => null
[count] => 0
[child] => Array
(
[Dagadu Bocah] => Array
(
[item] => Dagadu Bocah
[count] => 47
[child] => Array
(
[HirukPikuk] => Array
(
[item] => HirukPikuk
[count] => 5
[child] => Array
(
[DGD] => Array
(
[item] => DGD
[count] => 1
[child] =>
)
)
)
In my expectations, I can use the unset
function in the foreach loop to delete each array that has 3 keys, namely 'item', 'count' and 'child' so that it produces an array like this:
Array
(
[0] => ([Dagadu Bocah] =>Array([HirukPikuk] =>Array([DGD])
)
this is my code and does not meet my expectations:
public function conditionalPatternBase($a){
{
foreach($a as $key => $value){
foreach($value['child'] as $key1 => $value1){
if(is_array($value1['child'])){
foreach($value1['child'] as $value2){
unset($value2);
if(is_array($value2['child'])){
foreach($value2['child'] as $value3){
unset($value3);
if(is_array($value3['child'])){
foreach($value3['child'] as $value4){
unset($value4);
if(is_array($value4['child'])){
foreach($value4['child'] as $value5){
unset($value5);
}
}
}
}
}
}
}
}
}
}
}
}
can anyone help?
回答1:
For that kind of data you want to use recursion, like this:
<?php
function getChildKey(array $data)
{
$result = [];
if (isset($data['child'])) {
foreach ($data['child'] as $key => $value) {
$result[$key] = getChildKey($value);
}
}
if (empty($result)) {
return '';
}
return $result;
}
$input = [
[
'item' => null,
'count' => 0,
'child' => [
'Dagadu Bocah' => [
'item' => 'Dagadu Bocah',
'count' => 47,
'child' => [
'HirukPikuk' => [
'item' => 'HirukPikuk',
'count' => 5,
'child' => [
'DGD' => [
'item' => 'DGD',
'count' => 1,
'child' => null,
],
],
],
],
],
],
],
];
$output = [];
print_r($input);
foreach ($input as $index => $child) {
$output[$index] = getChildKey($child);
}
print_r($output);
来源:https://stackoverflow.com/questions/59745120/how-to-unset-every-array-in-nested-foreach