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

Мне просто нужно конвертировать в PHP:

[
'id' => '1',
'code' => 'DRX',
'company_name' => 'Dave Ricks Ltd'
],
[
'id' => '2',
'code' => 'LRT',
'company_name' => 'LiveRave Ltd'
]

Для того, чтобы …

[
[
[
'name' => 'id',
'value' => '1',
],
[
'name' => 'code',
'value' => 'DRX',
],
[
'name' => 'company_name',
'value' => 'Dave Ricks Ltd',
]
],
[
[
'name' => 'id',
'value' => '2',
],
[
'name' => 'code',
'value' => 'LRT',
],
[
'name' => 'company_name',
'value' => 'LiveRave Ltd',
]
]
]

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

0

Решение

Я предполагаю, что ваш начальный массив на самом деле

[
[
'id' => '1', 'code' => 'DRX', 'company_name' => 'Dave Ricks Ltd'
],
[
'id' => '2', 'code' => 'LRT', 'company_name' => 'LiveRave Ltd'
]
]

так как это то, что вы получите из базы данных. Если я ошибаюсь и вы опубликовали фактическое var_dump / print_r массива, это очень странно, но мы можем добавить шаг для его реорганизации.

Так что все, что нам нужно сделать, это

$input = [
[
'id' => '1',
'code' => 'DRX',
'company_name' => 'Dave Ricks Ltd',
],
[
'id' => '2',
'code' => 'LRT',
'company_name' => 'LiveRave Ltd',
]
];

$output = array_map(function($elem) {

return [
['name' => 'id', 'value' => $elem['id'] ],
['name' => 'code', 'value' => $elem['code'] ],
['name' => 'company_name', 'value' => $elem['company_name'] ],
];

}, $input);
print_r($output);

Если вы хотите, чтобы преобразование было более общим:

$output = array_map(function($elem) {

$result = [];
foreach ($elem as $key => $value) {
$result[] = ['name' => $key, 'value' => $value];
}
return $result;

}, $input);
print_r($output);

Я думаю о том, есть ли способ удалить этот внутренний foreach — но я не думаю, что есть тот, который стоит усилий.

0

Другие решения

Вы можете попробовать это:

while ($array) {
$item = array_shift($array);

$new_entry = array();

foreach ($item as $key => $value) {
$new_item['name'] = $key;
$new_item['value'] = $value;

$new_entry[] = $new_item;
}

$new_array[] = $new_entry;
}

$final_array = array($new_array);

print_r($final_array);

Печать:

Array
(
[0] => Array
(
[0] => Array
(
[0] => Array
(
[name] => id
[value] => 1
)

[1] => Array
(
[name] => code
[value] => DRX
)

[2] => Array
(
[name] => company_name
[value] => Dave Ricks Ltd
)

)

[1] => Array
(
[0] => Array
(
[name] => id
[value] => 2
)

[1] => Array
(
[name] => code
[value] => LRT
)

[2] => Array
(
[name] => company_name
[value] => LiveRave Ltd
)

)

)

)
0