2015-01-08 2 views
0

У меня есть существующий массив в PHP, как это (когда я использую print_r):PHP - получить массив в массив и хранить/манипулировать

Array (
    [0] => Array(
     [value] => 188 
     [label] => Lucy 
    ) 
    [1] => Array (
     [value] => 189 
     [label] => Jessica 
    ) 
    [2] => Array (
     [value] => 192 
     [label] => Lisa 
    ) 
    [3] => Array (
     [value] => 167 
     [label] => Carol 
    ) 
    // and so on... 
) 

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

Array (
    [Lucy] => 188 
    [Jessica] => 189 
    [Lisa] => 192 
    [Carol] => 167 
) 

Каков наилучший способ сделать это?

Мне нужны имена стали ключи, так что я могу затем сортировать в алфавитном порядке, как так:

uksort($array, 'strnatcasecmp'); 
+2

Вы предприняли какие-либо попытки? Должно быть довольно просто. –

+0

Возможный дубликат [PHP - unset в многомерном массиве] (http://stackoverflow.com/questions/7260468/php-unset-in-a-multidimensional-array) – johnny

ответ

6

ИМХО самый лучший и самый простой вариант заключается в следующем:

$newArray = []; 
foreach ($array as $var) { 
    $newArray[$var['label']] = $var['value']; 
} 

Примечание: если не работа из-за [], то измените первую строчку на классическую версию: $newArray = array();, поскольку это то же самое.

6

PHP 5.5 имеет приятную новую функцию array_column(), которая будет делать именно это для вас. Я думаю, что вы хотите что-то вроде этого:

$result = array_column($array, 'value', 'label'); 
0

Вы можете использовать array_reduce, а также, например, так:

$new_array = array_reduce($old_array, function($new_array, $item) { 
    $new_array[$item['label']] = $item['value']; 
    return $new_array; 
}, array()); 

В простых сценариях это, возможно, слишком много. В приложениях, где происходит много преобразований массивов, второй аргумент array_reduce может быть заменен и заменен в зависимости от контекста.

Смежные вопросы