amalino
Новичок
Здравствуйте все!
Имеется массив товаров, отсортированный по разным секциям (возрастанию элемента section_id).
Как пример:
$products = array(
array('id' =>1, 'name'=>'gel', 'section_id'=>1),
array('id'=>2, ,name'=> 'cream', 'section_id'=>1),
array('id'=>3, ,name'=> 'water', 'section_id'=>2),
array('id'=>4, ,name'=> 'juice', 'section_id'=>2),
array('id'=>5, ,name'=> 'vitamins', 'section_id'=>3),
array('id'=>3, ,name'=> 'aspirin', 'section_id'=>3));
Нужно этот массив разделить на массивы с одинаковыми section_id.
Причем в реале элементов в секции может быть много, и самих секций тоже.
Я попробовала сначала сформировать массив, в котором количество индексов соответствовало бы количеству секций, потом бы уже было проще его разделить по индексам.
Начала так.
$sections_all = array();
$sections = array();
foreach($products as $product)
{
$sections_all[] = $product['section_id']; // массив из всех section_id
}
$sections = array_unique($sections_all); // массив из уникальных section_id
$sections_count = count($sections); // посчет количества секций
Потом пройтись по основному массиву $products столько раз, сколько имеется секций.
$section_row = array();
$product_sect = array();
for ($i=0; $i<$sections_count; $i++)
{
$current_section = $sections[$i];
foreach ($products as $product)
if ($product['section_id'] == $current_section)
{
$section_row[] = $product;
}
else
{
break;
}
$product_sect[$i] = $section_row;
}
Понятно, что это не работает. Показала как идею.
Я не знаю, как сделать, чтобы перед break указатель массива смещался на количество итераций в foreach, а потом новый цикл начинал уже указанного элемента. Счетчика цикла в php нету, вроде.
А, может, подход в корне не верен и это полная чепуха?
Вобщем, то ли соображалки не хватает, то ли знаний. То ли и того и другого.
Имеется массив товаров, отсортированный по разным секциям (возрастанию элемента section_id).
Как пример:
$products = array(
array('id' =>1, 'name'=>'gel', 'section_id'=>1),
array('id'=>2, ,name'=> 'cream', 'section_id'=>1),
array('id'=>3, ,name'=> 'water', 'section_id'=>2),
array('id'=>4, ,name'=> 'juice', 'section_id'=>2),
array('id'=>5, ,name'=> 'vitamins', 'section_id'=>3),
array('id'=>3, ,name'=> 'aspirin', 'section_id'=>3));
Нужно этот массив разделить на массивы с одинаковыми section_id.
Причем в реале элементов в секции может быть много, и самих секций тоже.
Я попробовала сначала сформировать массив, в котором количество индексов соответствовало бы количеству секций, потом бы уже было проще его разделить по индексам.
Начала так.
$sections_all = array();
$sections = array();
foreach($products as $product)
{
$sections_all[] = $product['section_id']; // массив из всех section_id
}
$sections = array_unique($sections_all); // массив из уникальных section_id
$sections_count = count($sections); // посчет количества секций
Потом пройтись по основному массиву $products столько раз, сколько имеется секций.
$section_row = array();
$product_sect = array();
for ($i=0; $i<$sections_count; $i++)
{
$current_section = $sections[$i];
foreach ($products as $product)
if ($product['section_id'] == $current_section)
{
$section_row[] = $product;
}
else
{
break;
}
$product_sect[$i] = $section_row;
}
Понятно, что это не работает. Показала как идею.
Я не знаю, как сделать, чтобы перед break указатель массива смещался на количество итераций в foreach, а потом новый цикл начинал уже указанного элемента. Счетчика цикла в php нету, вроде.
А, может, подход в корне не верен и это полная чепуха?
Вобщем, то ли соображалки не хватает, то ли знаний. То ли и того и другого.
