Skip to content
Advertisement

Extract single index value (from every sub-array) from a multi-Key multidimensional array

I am trying to create an single-dimension array of ‘id’s’ extracted from a multidimensional array that will vary in depth. I need to extract the value from EACH array (no matter how deep). Each array has been indexed (see below) with the same keys. I have tried flattening so I could use ‘array_column’ (doesn’t work because of the number of keys in each array), as well as methods like print_r(array_keys($data[0])[0]) (doesn’t work for unknown dimension depth). It seems simple enough but I’m not finding any examples that are like this. Any direction is appreciated. Thank you.

Array
(
    [0] => Array
        (
            [id] => 1000005
            [first_name] => James
            [last_name] => Smith
            [position_root] => CHF CUST EX
            [position_area] => Customer Operations
            [items] => Array
                (
                    [0] => Array
                        (
                            [id] => 1000134
                            [first_name] => Brandt
                            [last_name] => Jones
                            [position_root] => BS APL PJCTS
                            [position_area] => Customer Executive Support
                            [items] => Array
                                (
                                )

                        )

                    [1] => Array
                        (
                            [id] => 1000149
                            [first_name] => Daniel
                            [last_name] => Brown
                            [position_root] => CUST PROG
                            [position_area] => CUSTOMER PROGRAMS
                            [items] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 1000060
                                            [first_name] => Duane
                                            [last_name] => Pearson
                                            [position_root] => CUST PRG IN
                                            [position_area] => Customer Program Design
                                            [items] => Array
                                                (
                                                )

                                        )

What I am hoping for is:

[0] => 1000005
[1] => 1000134
[2] => 1000149
[3] => 1000060

… and so on …

Advertisement

Answer

As suggested, you can use array_walk_recursive to achieve this.

<?php

$ids = [];
array_walk_recursive($data,function($value,$key) use (&$ids){
    if($key == 'id') $ids[] = $value;
});

print_r($ids);
User contributions licensed under: CC BY-SA
7 People found this is helpful
Advertisement