如何合并相同的数组而不显示它重复

时间:2011-02-06 19:44:27

标签: php arrays

我想将具有相同键的数组合并为一个。实施例

$options = array(
    array("group" => "header","title" => "Content 1"),
    array("group" => "header","title" => "Content 2"),
    array("group" => "menu","title" => "Content 3"),
    array("group" => "content","title" => "Content 4"),
    array("group" => "content","title" => "Content 5"),
    array("group" => "content","title" => "Content 6"),
    array("group" => "footer","title" => "Content 7")
);
foreach ($options as $value) {
    if ($value['group']) {
        echo "<div class='{$value['group']}'>";
        echo $value['title'];
        echo "</div>";
    }
}

当前输出

<div class='header'>Content 1</div><div class='header'>Content 2</div><div class='menu'>Content 3</div><div class='content'>Content 4</div><div class='content'>Content 5</div><div class='content'>Content 6</div><div class='footer'>Content 7</div>

我想要的是

<div class='header'>
Content 1
Content 2
</div>
<div class='menu'>
Content 3
</div>
<div class='content'>
Content 4
Content 5
Content 6
</div>
<div class='footer'>
Content 7
</div>

让我知道

2 个答案:

答案 0 :(得分:4)

$grouped = array();

foreach($options as $option) {
    list($group, $title) = array_values($option);
    if (!isset($grouped[$group])) {
        $grouped[$group] = array();
    }
    $grouped[$group][] = $title;
}

foreach ($grouped as $group => $titles) {
    echo sprintf('<div class="%s">%s</div>', $group, implode('', $titles));
}

答案 1 :(得分:2)

$groups = array ();

foreach ( $options as $value ) {
    if ( !isset ( $groups[$value['group']] ) ) {
        $groups[]['group'] = $value['group']
    }
    $groups[$value['group']]['title'][] = $value['title'];
}

foreach ( $groups as $group ) {
    echo "<div class="{$group['group']}">";
    echo implode ( "\n", $group['title'] );
    echo "</div>";
}

这应该可行,但是如果它对您无关紧要,您也可以只更改硬编码数组的结构,那么您就不需要我的第一个foreach