0

私は以下のような配列を持っています

Array
(
    [0] => stdClass Object
        (
            [id] => 1
            [cat_id] => 1
            [item_name]=>test1
            [cat_name] => Normal
        )

    [1] => stdClass Object
        (
            [id] => 2
            [cat_id] => 2
            [item_name]=>test2
            [cat_name] => Featured
        )

    [2] => stdClass Object
        (
            [id] => 3
            [cat_id] => 2
            [item_name]=>test3
            [cat_name] => Featured
        )  
)  

そして、私は結果をこのように見せたいです

普通

test1

特徴

test2  |  test3

私はこれまでこれを試しました:

<?php
foreach($rows as $row){
    echo '<h2>'.$row->cat_name.'</h2>';
    echo '<p>'.$row->item_name.'</p>';
}
?>

しかし、それは各アイテムの見出しを示しています。誰かがこれを整理するのを手伝ってくれませんか。

ありがとう

4

1 に答える 1

2

だからあなたはそれらをグループ化したいですか?そのための関数は次のとおりです。

function groupBy($arr, $func) {
    $groups = [];

    foreach($arr as $item) {
        $group = $func($item);

        if(array_key_exists($group, $groups))
            $groups[$group][] = $item;
        else
            $groups[$group] = [$item];
    }

    return $groups;
}

そのようにそれを使用してください:

$groups = groupBy($rows, function($row) { return $row->cat_name; });

foreach($groups as $name => $items) {
    echo "<h2>$name</h2>";

    foreach($items as $item)
        echo "<p>{$item->item_name}</p>";
}

そして、これがデモです。PHP 5.3の贅沢がない場合は、より専門的にすることができます。

function groupBy($arr, $prop) {
    $groups = array();

    foreach($arr as $item) {
        $group = $item->$prop;

        if(array_key_exists($group, $groups))
            $groups[$group][] = $item;
        else
            $groups[$group] = array($item);
    }

    return $groups;
}
...
$groups = groupBy($rows, 'cat_name');

foreach($groups as $name => $items) {
    echo "<h2>$name</h2>";

    foreach($items as $item)
        echo "<p>{$item->item_name}</p>";
}

PHP5.2.17でのデモ

于 2013-01-19T19:46:37.897 に答える