如何通过其中一个键上的值更改来拆分数组?

时间:2011-10-13 11:58:01

标签: php arrays multidimensional-array

我从数据库中返回行并从另一个表中加入以获得每个产品的品牌,我希望能够拆分

Array(
    [0] => stdClass Object
        (
            [pid] => 1
            [prodref] => F50
            [brand] => 1
            [name] => Adidas
        )

    [1] => stdClass Object
        (
            [pid] => 3
            [prodref] => Mercurial
            [brand] => 2
            [name] => Nike
        )
)

这是一个简化版本,但我有四个品牌,在数据库查询中我按品牌订购,然后是 prodref ,所以我希望能够通过品牌拆分数组键 - 所以我只需要一次数据库查询即可在页面的不同区域显示所有Adidas产品。

2 个答案:

答案 0 :(得分:2)

foreach ($rows as $row) {
    $result[$row->name][] = $row;
}

答案 1 :(得分:0)

如果你只有非常具体的情况,比如里面的属性有一个像品牌2这样的值,你可以重载数组,然后按你认为合适:

# $rows is your resultset
$rows = function($filter = NULL, $prop = 'brand') use ($rows)
{
    if(!$filter) return $rows;
    $subset = array();
    foreach($rows as $row)
        if ($row->$prop == $filter) $subset[] = $row;
    return $subset;
};

如果您以后想要输出所有$rows

foreach($rows() as $row) ...

或者,如果您想获得品牌2的所有行:

foreach($rows(2) as $row) ...

或1:

foreach($rows(1) as $row) ...

最后,如果您想通过其他属性获取子集:

foreach($rows('Adidas', 'name') as $row) ...

如果您的应用程序增长,您应该查看SPL and the Iterators it offers