#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 и предлагаемые им итераторы.