haha
haha

Reputation: 1532

How do I merge same array without show it duplicate

I want to merge array which have same key to be one. Example

$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>";
    }
}

Current output is

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

What I want here is to be

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

Let me know

Upvotes: 1

Views: 535

Answers (2)

Radek
Radek

Reputation: 8376

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

Upvotes: 4

anroesti
anroesti

Reputation: 11403

$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>";
}

This should work, but if it doesn't matter to you, you could also just change the structure of your hardcoded-array, then you wouldn't need my first foreach.

Upvotes: 2

Related Questions