将两列使用array_column连接成一个列

7

我有一个类型为

数组
$records = array(
array(
    'id' => 2135,
    'first_name' => 'John',
    'last_name' => 'Cena',
),
array(
    'id' => 5623,
    'first_name' => 'Peter',
    'last_name' => 'Doe',
));

I want to display the output in the format of

[2135] => John Cena
[5623] => Peter Doe

我一直在使用以下代码尝试显示我的预期结果,但它并没有起作用。

$names = array_column($records, 'first_name' . 'last_name', 'id');

如何将数组的两列连接成一列?

请查看array_column()的手册。它不需要四个参数,而是需要三个参数。第一个参数是数组,第二个参数是要获取的列(一列),第三个参数决定要使用哪一列作为索引。 - M. Eriksson
我已经仔细阅读了它,这就是为什么我试图将四个参数作为三个发送的原因。 - Bibek Aryal
啊。错过了你对第二个参数进行字符串连接的操作。那样行不通。这与编写array_column($records,'first_namelast_name','id')是一样的。这将导致它寻找一个实际上不存在的列名叫做first_namelast_name。你不能使用此函数连接两个列。请改用@shubham715回答中的代码。 - M. Eriksson
@shubham715 是的,我现在正在阅读它。 - Bibek Aryal
@MagnusEriksson 好的,我会尝试他的代码。 - Bibek Aryal
5个回答

7
您可以使用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
)

2
$key从未被使用,因此在您的循环中声明它没有任何意义。 - mickmackusa

7
您现有的代码无法运行是因为您让PHP查找$records数组中不存在的键first_namelast_name
PHP手册条目所述,array_column只返回单个列。
您需要手动循环遍历数组并连接字符串。可以使用的一个函数是array_reduce
$names = array_reduce($records, function ($result, $item) {
    $result[$item['id']] = $item['first_name'] . ' ' . $item['last_name'];
    return $result;
});

对我来说,array_map()array_reduce()更合适,因为期望的输出与输入数组的大小(计数)相同。当返回的元素数量不等于输入的计数时,array_reduce()成为首选的本地函数。 - mickmackusa

1
你可以通过创建另一个数组来实现。只需使用foreach循环将子数组的值合并到新创建的数组中即可。
$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
)

1
一个好的回答应该包括为什么OP应该使用它的解释。它解决了什么问题?它是如何解决的? - M. Eriksson
尝试这个(仅代码)的答案在StackOverflow上价值不高,因为它们无法很好地教育/授权OP和成千上万的未来研究人员。请始终在您发布的每个答案中包含一些解释。不要等到下次,请编辑此答案。 - mickmackusa

1

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 );

尝试这个(仅代码)的答案在StackOverflow上价值不高,因为它们无法很好地教育/授权OP和成千上万的未来研究人员。请始终在您发布的每个答案中包含一些解释。不要等到下次,请编辑此答案。 - mickmackusa

0

我想没有 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);

谢谢


在发布你的答案之前,你有检查过其他解决方案吗?你的解决方案逻辑不够严谨,也没有解释。 - Alive to die - Anant
当我编写这段代码时,没有其他答案。我喜欢其他的解决方案。谢谢。 - Delickate

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接