如何在 PHP 中创建这个数组?
Posted
技术标签:
【中文标题】如何在 PHP 中创建这个数组?【英文标题】:How do I create this array in PHP? 【发布时间】:2011-04-21 17:04:45 【问题描述】:我有这个问题
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
,无论它是 1、2 还是 3,最后每个 product_id
在每个数组中...
关于如何创建这个数组的任何想法
【问题讨论】:
【参考方案1】:这是一个解决方案:
<?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);
?>
现在只需更新以从您的数据库中提取。
【讨论】:
【参考方案2】:这样的事情应该可以工作:
$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 请求的数据。
【讨论】:
你的逻辑有风险。这是假设所有记录都按 step_number 的顺序出现,或者您将拥有多个具有相同 step_number 的数组。因此,如果您获得 3 条记录,其中 step_number = 1,第 4 条记录为 step_number = 2,第 5 条记录为 step_number = 1,您将有两个数组,其中 step_number = 1。以上是关于如何在 PHP 中创建这个数组?的主要内容,如果未能解决你的问题,请参考以下文章