#php #arrays
#php #массивы
Вопрос:
У меня есть массив в виде
Array
(
[0] => Array
(
[attribute_pa_weight] => 500g-pack
)
[1] => Array
(
[attribute_pa_weight] => 1kg-pack
)
)
Потребуется, чтобы вывод был
Array
(
[attribute_pa_weight] => Array
(
[0] => 500g-pack
[1] => 1kg-pack
)
)
Требуется сортировка без указания значения ключа для сортировки, потому что они поступают динамически.
Ответ №1:
Здесь можно использовать PHP-функцию array_reduce:
<?php
$a = [['attribute_pa_weight'=>'500g-pack'],['attribute_pa_weight'=>'1kg-pack']];
$res = array_reduce(
$a, // source array
function($acc, $el) {
if (!isset($acc[key($el)])) $acc[key($el)] = [];
array_push($acc[key($el)], $el[key($el)]);
return $acc;
},
[] // initial result
);
print_r($res);
Вы можете попробовать код на PHPize.online
Ответ №2:
Другим кандидатом на эту работу был бы array_map!
$input = [
['attribute_pa_weight' => '500g-pack'],
['attribute_pa_weight' => '1kg-pack'],
];
$output['attribute_pa_weight'] = array_map(fn ($v) => $v['attribute_pa_weight'], $input);
print_r($output);
Если вы не можете или не хотите использовать функции со стрелками (нужен PHP ^7.4.0
).
$output['attribute_pa_weight'] = array_map(function ($value) {
return $value['attribute_pa_weight'];
}, $input);
print_r($output);
И если вы хотите, чтобы это было динамично, вы могли бы создать функцию.
$merge = function ($name) use ($input) {
return [$name => array_map(fn ($v) => $v[$name], $input)];
};
print_r($merge('attribute_pa_weight'));
Комментарии:
1. В OP не упоминается, какая сортировка требуется. Возможно, вы захотите показать, как сортировать конечный результат. Отличная работа.