Как извлечь определенные ключи массива и значение в другой массив?

Обновить

December 2018

Просмотры

60.3k раз

33

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

array( array(), array(), array(), array() );

массивы внутри основного массива содержит 4 ключа и их значения. Клавиши одинаковы среди всех массивов, как это:

array( 'id' => 'post_1',
       'desc' => 'Description 1',
       'type' => 'type1',
       'title' => 'Title'
     );

array( 'id' => 'post_2',
       'desc' => 'Description 2',
       'type' => 'type2',
       'title' => 'Title'
     );

Поэтому я хочу , чтобы создать еще один массив и извлечь idи typeценности и поместить их в новый массив , как это:

array( 'post_1' => 'type1', 'post_2' => 'type2'); // and so on

Ключи в этом массиве будут значением idключевых старых массивов и их значение будет значением typeключа.

Так можно ли добиться этого? Я пытался искать PHP.net Функции массива , но я не знаю , какую функцию использовать?

3 ответы

31

Just use a good ol' loop:

$newArray = array();
foreach ($oldArray as $entry) {
    $newArray[$entry['id']] = $entry['type'];
}
84

PHP recently added new function to their array functions that does exactly what you wanted. I'm answering this in hopes that it may help someone in future with this question.

The function that does this is array_column. To get what you wanted you would write:

array_column($oldArray, 'type', 'id');

Please note that it was only introduced in PHP 5.5.0 version, so to use it on lower versions of PHP either use accepted answer or take a look at how this function was implemented in PHP and use this library: https://github.com/ramsey/array_column

-1

Let's suppose we have an array $oldArray from which we want to extract and the second array $newArray is one in which we will be stored.

$oldArr = array(
    array( 'id' => 'post_1',
       'desc' => 'Description 1',
       'type' => 'type1',
       'title' => 'Title'
     ),
    array( 'id' => 'post_2',
           'desc' => 'Description 2',
           'type' => 'type2',
           'title' => 'Title'
    )
);

Now we simply use array_column method as below

$newArr = array_column($oldArr, 'type', 'id');

And it will give output in key/value pair as below

array
(
    [post_1] => type1
    [post_2] => type2
)