У меня есть существующий массив на PHP, например (когда я использую print_r
):
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');
ИМХО лучший и самый простой вариант:
$newArray = [];
foreach ($array as $var) {
$newArray[$var['label']] = $var['value'];
}
Примечание: если не работает из-за []
измените первую строку на классическую версию: $newArray = array();
как то же самое.
PHP 5.5 имеет приятную новую функцию array_column(), которая будет делать именно это для вас. Я думаю, вам нужно что-то вроде этого:
$result = array_column($array, 'value', 'label');
Вы также можете использовать array_reduce, например:
$new_array = array_reduce($old_array, function($new_array, $item) {
$new_array[$item['label']] = $item['value'];
return $new_array;
}, array());
В простых сценариях это, возможно, слишком велико. В приложениях, где происходит много преобразований массивов, второй аргумент array_reduce может быть заменен и заменен в зависимости от контекста.