如何在 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_idfirst_classsecond_classthird_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 中创建这个数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 jquery 中创建关联数组并通过 ajax 发送以使用 php 解析?

如何在 PHP 中创建可视化存档?

如何在 PHP 中创建网页的图像?

如何在 PHP 中创建子域? [复制]

在 PHP 中创建关联数组的数组

如何使用多个 for 循环在 php 中创建 sql 语句