简体   繁体   中英

How to remove the keys from a multi-dimensional associative array?

I have an associative array which has the following format:

array (
  'Shopping and fashion' => 
  array (
    'childData' => 
    array (
      'Beauty' => 
      array (
        'childData' => 
        array (
          'Cosmetics' => 
          array (
            'id' => '6002839660079',
            'name' => 'Cosmetics',
            'parentName' => 'Beauty',
          ),
          'Tattoos' => 
          array (
            'id' => '6003025268985',
            'name' => 'Tattoos',
            'parentName' => 'Beauty',
          ),),))))

I want to remove the keys from the array. For this I am using :

array_values($my_data)

However, this only works for the topmost level of array, which in this case is "Shopping and fashion". It converts that to index 0. How can I do the same for every array inside the index too?

EXPECTED OUTPUT:

array (
    0 =>
        array (
            'childData' =>
                array (
                    0 =>
                        array (
                            'childData' =>
                                array (
                                    0 =>
                                        array (
                                            'id' => '6002839660079',
                                            'name' => 'Cosmetics',
                                            'parentName' => 'Beauty',
                                        ),
                                    1 =>
                                        array (
                                            'id' => '6003025268985',
                                            'name' => 'Tattoos',
                                            'parentName' => 'Beauty',
                                        ),
                                ),
                            'name' => 'Beauty',
                            'id' => '6002867432822',
                            'parentName' => 'Shopping and fashion',
                        ),)))

The array I have has many different arrays on the parent level and many more array inside them so using for each is posing a problem as the number of "childData",ie child arrays inside parent arrays are varying.

Could recursion be possible?

I don't know built-in function, but maybe this function would help you?

function array_values_recursive( $array ) {
    $newArray = [];
    foreach ( $array as $key => $value ) {
        if ( is_array( $value ) ) {
            $newArray[] = array_values_recursive( $value );
        } else {
            $newArray[$key] = $value;
        }
    }
    return $newArray;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM