首页 > 解决方案 > 合并具有相同键名的多维数组

问题描述

我有一个多维数组,我想在表格中显示这些值。

这是代码:

$attributes = [
    [
        "attributeName"=> "Name",
        "value"=> "Paul"
    ],
    [
        "attributeName"=> "Name",
        "value"=> "Steve"
    ],
    [
        "attributeName"=> "Name",
        "value"=> "John"
    ],
    [
        "attributeName"=> "Name",
        "value"=> "Andrew"
    ],

    [
        "attributeName"=> "Destination",
        "value"=> "London"
    ],
    [
        "attributeName"=> "Destination",
        "value"=> "Paris"
    ],
    [
        "attributeName"=> "Destination",
        "value"=> "Ankara"
    ],
    [
        "attributeName"=> "Destination",
        "value"=> "Kuwait"
    ],
];

我希望将输出放在一张桌子上,thead 是 Name 和 Destination,而 td 是 Name 和 Destinations 的值。

或这个

姓名:保罗、史蒂夫、约翰、安德鲁

目的地:伦敦、巴黎、安卡拉、科威特

标签: phparraysmultidimensional-array

解决方案


您可以使用array_reduce将所有属性分组到一个输出数组中:

$output = array_reduce($attributes, function ($carry, $arr) {
    $carry[$arr['attributeName']][] = $arr['value'];
    return $carry;
}, array());

输出:

Array
(
    [Name] => Array
        (
            [0] => Paul
            [1] => Steve
            [2] => John
            [3] => Andrew
        )
    [Destination] => Array
        (
            [0] => London
            [1] => Paris
            [2] => Ankara
            [3] => Kuwait
        )
)

要将其输出为表格,您可以使用foreach循环:

echo "<table>\n";
foreach ($output as $key => $values) {
    echo "<tr><td>$key</td><td>" . implode('</td><td>', $values) . "</td></tr>\n";
}
echo '</table>';

输出:

<table>
<tr><td>Name</td><td>Paul</td><td>Steve</td><td>John</td><td>Andrew</td></tr>
<tr><td>Destination</td><td>London</td><td>Paris</td><td>Ankara</td><td>Kuwait</td></tr>
</table>

3v4l.org 上的演示


推荐阅读