Home » Php » php – Get specific element from each sub array

php – Get specific element from each sub array

Posted by: admin April 23, 2020 Leave a comment

Questions:

I have a common pattern which Im sure there must be a built-in array function in PHP to handle but just can’t see it.

I have multiple arrays such as the following:

$testArray = array (
    'subArray1' => array(
        'key1' => "Sub array 1 value 1",
        'key2' => "Sub array 1 value 1"
    ),
    'subArray2' => array(
        'key1' => "Sub array 2 value 1",
        'key2' => "Sub array 2 value 2"
    )
);

I need to get the key1 values from each subArray, of which there can be any number.

I always end up just looping over each array to get the required values, but I’m sure there must be an easier, more efficient way to handle this.

I am currently using the following simple foreach to parse the arrays:

$preparedSubs = array();

foreach($testArray as $subArray) {
    $preparedSubs[] = $subArray['key1'];
}

It’s as short as I can make it, but as I said I’m sure there is a PHP construct that would handle this better.

How to&Answers:

Before PHP 5.5, this would be the most efficient solution:

$key = 'key1';

$output = array_map(function($item) use ($key) {
    return $item[$key];
}, $testArray);

As of PHP 5.5, there is now an array_column function for this (see COil’s answer).

Answer:

As of PHP 5.5 you can use the array_column() function:

$key = 'key1';

$testArray = array (
    'subArray1' => array(
        'key1' => "Sub array 1 value 1",
        'key2' => "Sub array 1 value 2"
    ),
    'subArray2' => array(
        'key1' => "Sub array 2 value 1",
        'key2' => "Sub array 2 value 2"
    )
);

$output = array_column($testArray, $key);
var_dump($output);

Will output:

array(2) {
  [0]=>
  string(19) "Sub array 1 value 1"
  [1]=>
  string(19) "Sub array 2 value 1"
}

The only difference with the accepted answer is that you lose the original key name, but I think this is not a problem in your case.