Подтвердить что ты не робот

Получить определенный элемент из каждого вспомогательного массива

У меня есть общий шаблон, который Im уверен, что в PHP должна быть встроенная функция массива, но она просто не может ее видеть.

У меня есть несколько массивов, например:

$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"
    )
);

Мне нужно получить значения key1 из каждого subArray, из которых может быть любое число.

Я всегда заканчиваю просто цикл по каждому массиву, чтобы получить требуемые значения, но я уверен, что должен быть более простой и эффективный способ справиться с этим.

В настоящее время я использую следующий простой foreach для анализа массивов:

$preparedSubs = array();

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

Это так короче, как я могу это сделать, но, как я уже сказал, я уверен, что есть конструкция PHP, которая справится с этим лучше.

4b9b3361

Ответ 1

До PHP 5.5 это было бы наиболее эффективным решением:

$key = 'key1';

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

Как и в случае с PHP 5.5, для этого теперь есть функция array_column (см. Ответ на COil).

Ответ 2

Начиная с PHP 5.5 вы можете использовать функцию array_column():

$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);

Будет выводиться:

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

Единственное отличие от принятого ответа состоит в том, что вы теряете исходное имя ключа, но я думаю, что это не проблема в вашем случае.