Как разделить массив путем изменения значения на одном из ключей? - PullRequest
1 голос
/ 13 октября 2011

Я возвратил строки из базы данных и соединил их из другой таблицы, чтобы получить марку для каждого продукта, я хочу иметь возможность разделить

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

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

Это упрощенная версия, но у меня есть четыре бренда, и по запросу к базе данных я заказал по бренду, затем по prodref , поэтому я хочу иметь возможность разбить массив по марке * Клавиша 1007 * - чтобы я мог показать все продукты Adidas в разных областях страницы только одним запросом к базе данных.

Ответы [ 2 ]

2 голосов
/ 13 октября 2011
foreach ($rows as $row) {
    $result[$row->name][] = $row;
}
0 голосов
/ 18 октября 2011

Если у вас есть только очень конкретные случаи, например, если свойство внутри имеет значение, например, бренд равен 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 и предлагаемые им итераторы .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...