У меня есть массив типа
$records = array(
array(
'id' => 2135,
'first_name' => 'John',
'last_name' => 'Cena',
),
array(
'id' => 5623,
'first_name' => 'Peter',
'last_name' => 'Doe',
));
Я хочу отобразить вывод в формате
[2135] => John Cena
[5623] => Peter Doe
Я использовал следующий код, чтобы попытаться отобразить ожидаемый результат, но он не работает.
$names = array_column($records, 'first_name' . 'last_name', 'id');
Как я могу объединить два столбца массива в один?
Вы можете создать новый массив с помощью цикла foreach.
Попробуй это
$newArray = [];
foreach($records as $key => $value) {
$newArray[$value['id']]= $value['first_name']." ".$value['last_name'];
}
print_r($newArray);
Выход
Array
(
[2135] => John Cena
[5623] => Peter Doe
)
Причина, по которой ваш текущий код не работает, заключается в том, что вы просите PHP посмотреть в $records
массив для ключа first_namelast_name
, которого не существует
array_column
возвращает только один столбец, как указано в PHP ручной ввод
(PHP 5> = 5.5.0, PHP 7)
array_column — вернуть значения из одного столбца на входе
Вам нужно перебрать массив и соединить строки вручную. Вы можете использовать одну функцию array_reduce
:
$names = array_reduce($records, function ($result, $item) {
$result[$item['id']] = $item['first_name'] . ' ' . $item['last_name'];
return $result;
});
Вы можете достичь этого, создав другой массив. Просто объедините значение под-массива в новый созданный массив, используя для каждого петля.
$records = array(
array(
'id' => 2135,
'first_name' => 'John',
'last_name' => 'Cena',
),
array(
'id' => 5623,
'first_name' => 'Peter',
'last_name' => 'Doe',
));
foreach($records as $data)
{
$temp[$data['id']] = $data['first_name'].' '.$data['last_name'];
}
echo "<pre>";
print_r($temp);
// Output
Array
(
[2135] => John Cena
[5623] => Peter Doe
)
Я думаю, что нет встроенной функции php. Вы можете перебрать массив и объединить их.
$records = array(
array(
'id' => 2135,
'first_name' => 'John',
'last_name' => 'Cena',
),
array(
'id' => 5623,
'first_name' => 'Peter',
'last_name' => 'Doe',
));
$newArray = array();
foreach($records as $data)
{
$index = "";
$value = "";
$indexLoop = 1;
foreach($data as $reckey => $recValue)
{
if($indexLoop ==1)
{
$index = $recValue;
}else{
$value .= $recValue." ";
}
$indexLoop++;
}
$newArray[$index] = $value;
}
echo "<pre>"; print_r($newArray);
Спасибо
array_column работает над такой проблемой, но здесь он не может объединить ключи first_name и last_name, так что вы также можете попробовать этот код —
$records = array(
array(
'id' => 2135,
'first_name' => 'John',
'last_name' => 'Cena',
),
array(
'id' => 5623,
'first_name' => 'Peter',
'last_name' => 'Doe',
));
$tmp = [];
foreach($records as $key) {
$tmp[$key["id"]] = $key["first_name"] . " " . $key["last_name"];
}
print_r($tmp); // Array ( [2135] => John Cena [5623] => Peter Doe );