Как разделить массив с помощью изменения значения на одном из ключей?

#php #arrays #multidimensional-array

#php #массивы #многомерный-массив

Вопрос:

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

 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 в разных областях страницы только одним запросом к базе данных.

Ответ №1:

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

Ответ №2:

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