创建一个多维数组

时间:2017-02-27 02:26:35

标签: php mysql arrays

我在酒店预订系统工作,价格是每晚。我的数据库有两个表,一个叫做stock,另一个是促销。第一行包含一行(365天),最后一行仅包含折扣百分比的天数。有时,有些日子有两个或更多不同的折扣百分比。在这种情况下,1月30日和31日有0.10和0.15。

表库存

date         | rate
--------------------------
2017-01-29     500
2017-01-30     500
2017-01-31     500

表促销

date         | percent
--------------------------
2017-01-30     0.10
2017-01-31     0.10
2017-01-30     0.15
2017-01-31     0.15

当mysql查询(SELECT s.date, s.rate, IFNULL(p.percent, 0) FROM stock s LEFT JOIN promotions p ON s.date = p.date WHERE s.date as date BETWEEN '2017-01-29' AND '2017-01-31')时,我得到了这个结果:

date         | rate       | percent
-----------------------------------
2017-01-29     500          0
2017-01-30     500          0.10
2017-01-31     500          0.10
2017-01-30     500          0.15
2017-01-31     500          0.15

我需要创建一个多维数组,每个折扣百分比包含一个数组,这些数组包含三天,第29天包含百分比0.00,其他两天包含0.10。第29天换新的,百分之0.00,另外两天0.15。我正在尝试,但我无法在两个数组中分配第29天,如示例中所示。

Array
(
    [0.10] => Array
        (
            [0] => Array
                (
                    [date] => 2017-01-29
                    [rate]=>500
                    [percent] => 0.00
                )

            [1] => Array
                (
                    [date] => 2017-01-30
                    [rate]=>500
                    [percent] => 0.10
                )

            [2] => Array
                (
                    [date] => 2017-01-31
                    [rate]=>500
                    [percent] => 0.10
                )
        )

    [0.15] => Array
        (
            [0] => Array
                (
                    [date] => 2017-01-29
                    [rate]=>500
                    [percent] => 0.00
                )

            [1] => Array
                (
                    [date] => 2017-01-30
                    [rate]=>500
                    [percent] => 0.15
                )

            [2] => Array
                (
                    [date] => 2017-01-31
                    [rate]=>500
                    [percent] => 0.15

                )
        )
)

我对php数组有点困惑。我可以使用以下代码对第一个数组的结果进行分组:

$grouped = array();
foreach ($array_p as $item) {
$grouped[$item['percent']][]= $item; 
}

但我只获得此结果

    Array
(
    [0.10] => Array
        (
            [0] => Array
                (
                    [date] => 2017-01-30
                    [rate] => 500
                    [percent] => 0.10
                )

            [1] => Array
                (
                    [date] => 2017-01-31
                    [rate] => 500
                    [percent] => 0.10
                )

        )

    [0.15] => Array
        (
            [0] => Array
                (
                    [date] => 2017-01-30
                    [rate] => 500
                    [porcentaje] => 0.15
                )

            [1] => Array
                (
                    [date] => 2017-01-31
                    [rate] => 743.80
                    [percent] => 0.15
                )

        )

    [0.00] => Array
        (
            [0] => Array
                (
                    [date] => 2017-01-29
                    [rate] => 500
                    [percent] => 0.00
                )

        )

)

如何在每个阵列中插入三天?

2 个答案:

答案 0 :(得分:1)

试试这个 -

              $grouped = array();
              $seperate = array();
                foreach ($array_p as $item) {
                    if($item["percent"] == 0) {
                      $seperate[] = $item;
                    } else {                          
                        $grouped[$item['percent']][]= $item;
                    }
                }
                foreach( $grouped as $key => $val ) {
                    $grouped[$key] = array_merge($val,$seperate);
                }
                print_R($grouped);

答案 1 :(得分:0)

我不确定这是最好的方法,但它可以帮助你开始:

$grouped = array();

foreach ($array_p as $item) {
    $grouped[$item['percent']] = array();
}

foreach ($array_p as $item) {
    if (!in_array($array_p[0], $grouped[$item['percent']]) && $item['percent'] != 0) {
        $grouped[$item['percent']][] = $array_p[0];
    }

    $grouped[$item['percent']][] = $item;
}

这假设折扣0总是在$array_p的索引0处,并且您将始终存储折扣0.无论如何,我会尝试改进它。

编辑:我仅使用一个foreach循环以另一种方式改进了上述答案

$grouped = array();

foreach ($array_p as $item) {
    if (!array_key_exists($item['percent'], $grouped) {
        $grouped[$item['percent']] = array();
    }

    if (!in_array($array_p[0], $grouped[$item['percent']]) && $item['percent'] != 0) {
        $grouped[$item['percent']][] = $array_p[0];
    }

    $grouped[$item['percent']][] = $item;
}

注意:这些方法不会保存重复的项目。

<强>文档