Мне просто нужно конвертировать в 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 я мог сделать то же самое с меньшим количеством строк кода?
Я предполагаю, что ваш начальный массив на самом деле
[
[
'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 — но я не думаю, что есть тот, который стоит усилий.
Вы можете попробовать это:
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
)
)
)
)