2

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 Answer 1

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);
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.