У меня есть этот запрос
select * from template_product where template_id = 8 group by class_id, product_id
который возвращается
template_product_id template_step_id step_number product_id class_id template 16 11 1 54 1 8 17 11 1 56 1 8 18 11 1 57 1 8 19 11 1 58 1 8 20 11 1 54 2 8 21 11 1 56 2 8 22 11 1 57 2 8 23 11 1 58 2 8 24 11 1 59 2 8 25 11 1 60 2 8 26 11 1 63 2 8 27 11 1 64 2 8 28 11 1 52 2 8 29 11 1 54 3 8 30 11 1 52 3 8 31 12 2 61 1 8 32 12 2 62 2 8 33 12 2 61 3 8
из этих данных, как мне создать такой массив
Array ( [0] => Array ( [step_number] => 1 [first_class] => [54, 56, 57, 58] [second_class] => [54, 56, 57, 58, 59, 60, 63, 64, 52] [third_class] => [54, 52] ) [1] => Array ( [step_number] => 2 [first_class] => [61] [second_class] => [62] [third_class] => [61] ) )
В принципе, каждый номер шага – это новый массив, а class_id
– либо first_class
, second_class
, third_class based
основе того, third_class based
ли это 1, 2 или 3, и, наконец, каждый product_id
находится в массиве в каждом …
Любые идеи о создании этого массива
Вот решение:
<?php $records = array( array('step_number' => 1, 'class_id' => 1, 'product_id' => 54), array('step_number' => 1, 'class_id' => 1, 'product_id' => 56), array('step_number' => 1, 'class_id' => 1, 'product_id' => 57), array('step_number' => 1, 'class_id' => 1, 'product_id' => 58), array('step_number' => 1, 'class_id' => 2, 'product_id' => 54), array('step_number' => 1, 'class_id' => 2, 'product_id' => 56), array('step_number' => 1, 'class_id' => 2, 'product_id' => 57), array('step_number' => 2, 'class_id' => 2, 'product_id' => 58), array('step_number' => 2, 'class_id' => 2, 'product_id' => 59), array('step_number' => 2, 'class_id' => 2, 'product_id' => 60), array('step_number' => 2, 'class_id' => 2, 'product_id' => 63), array('step_number' => 2, 'class_id' => 2, 'product_id' => 64), ); $new_array = array(); foreach($records as $record => $row) { $class = ''; switch ($row['class_id']) { case '1': $class = 'first_class'; break; case '2': $class = 'second_class'; break; case '3': $class = 'third_class'; break; } $new_array['step_number'][$row['step_number']][$class][] = $row['product_id']; } print_r($new_array); ?>
Теперь просто обновите, чтобы извлечь из вашей базы данных.
Что-то вроде этого должно работать:
$result = array(); $currentStepNumber = null; foreach ($table as $item) { $stepNumber = $item['step_number']; if ($stepNumber != $currentStepNumber) { $result[] = array( 'step_number' => $stepNumber, 'first_class' => array(), 'second_class' => array(), 'third_class' => array() ); $currentStepNumber = $stepNumber; } switch ($item['class_id']) { case 1: $result[count($result) - 1]['first_class'][] = $item['product_id']; break; case 2: $result[count($result) - 1]['second_class'][] = $item['product_id']; break; case 3: $result[count($result) - 1]['third_class'][] = $item['product_id']; break; default: } } var_dump($result);
где $table
– это ваши данные из запроса sql.