2017-02-27 91 views
0

我在酒店预订系统中工作,而且价格是每晚。我的数据库有两个表格,一个叫做股票和其他促销。第一个包含一天(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 

我需要创建一个多维数组,包含一个数组为折扣的每个百分比,并且这些数组包含三个d ays,第二十九天的百分比为0.00,其他两天为0.10。一个新的一天,29日,百分比0.00,其他两天0.15。我在尝试但我不能在这两个数组中分配第29天,就像在这个例子中一样。我有点卡在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 
       ) 

     ) 

) 

我如何可以插入三天每个阵列中?

回答

1

尝试This--

   $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); 
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总是在指数0 $array_p,那你将永远存储折扣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; 
} 

注意提高另一种方式上面的回答:这些方法将不保存重复的项目。

文档