2

I have an array like this:

array(2) {
  [0]=>
  array(1) {
    [0]=>
    object(Bas\WWW\Router\Route\URIs\URI\Parameters\Parameter\Parameter)#13 (2) {
      ["name":"Bas\WWW\Router\Route\URIs\URI\Parameters\Parameter\Parameter":private]=>
      string(2) "name1"
      ["value":"Bas\WWW\Router\Route\URIs\URI\Parameters\Parameter\Parameter":private]=>
      string(2) "30"
    }
  }
  [1]=>
  array(2) {
    [0]=>
    object(Bas\WWW\Router\Route\URIs\URI\Parameters\Parameter\Parameter)#12 (2) {
      ["name":"Bas\WWW\Router\Route\URIs\URI\Parameters\Parameter\Parameter":private]=>
      string(2) "name2"
      ["value":"Bas\WWW\Router\Route\URIs\URI\Parameters\Parameter\Parameter":private]=>
      string(6) "289213"
    }
    [1]=>
    object(Bas\WWW\Router\Route\URIs\URI\Parameters\Parameter\Parameter)#15 (2) {
      ["name":"Bas\WWW\Router\Route\URIs\URI\Parameters\Parameter\Parameter":private]=>
      string(6) "name3"
      ["value":"Bas\WWW\Router\Route\URIs\URI\Parameters\Parameter\Parameter":private]=>
      string(5) "00123"
    }
  }
}

And I want to retrieve all objects in it, which are the values of the inner array keys.

My approach was by looping the first outer values, then looping the inner values and placing those in a seperate array.

$a = [];
foreach ($parameters as $parameter) {
    foreach ($parameter as $data) {
        $a[] = $data;
    }
} 

Is there a better way for doing this instead of looping both of the arrays?

Bas
  • 2,106
  • 5
  • 21
  • 59
  • Is all you really want to do is to flatten your two dimensional array into a one dimensional array that you can iterate over? – Jeff Lambert Jul 27 '16 at 20:15
  • @JeffLambert It's not something with high priority, but i was just wondering yeah. – Bas Jul 27 '16 at 20:16

2 Answers2

3

Simple solution is merge your sub_arrays, treating your array as a list of arguments to array_merge:

$a = call_user_func_array('array_merge', $parameters);
u_mulder
  • 54,101
  • 5
  • 48
  • 64
2

Simple solution using array_walk_recursive function:

$result = [];
array_walk_recursive($parameters, function($v) use(&$result){ $result[] = $v; });

http://php.net/manual/en/function.array-walk-recursive.php

RomanPerekhrest
  • 88,541
  • 4
  • 65
  • 105