我在酒店预订系统工作,价格是每晚。我的数据库有两个表,一个叫做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
)
)
)
如何在每个阵列中插入三天?
答案 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;
}
注意:这些方法不会保存重复的项目。
<强>文档强>: