2017-02-27 1 views
0

나는 호텔 예약 시스템에서 일하고 있으며, 1 박당 요금입니다. 내 데이터베이스에는 두 개의 테이블이 있는데 하나는 주식 및 다른 프로모션이라고합니다. 첫 번째 행은 하루 (365 일) 동안 한 행을 포함하고 마지막 행은 할인율이있는 요일을 포함합니다. 때로는 며칠간 할인율이 2 % 이상 차이 날 때도 있습니다. 이 경우 1 월 30 일과 31 일에는 0.10과 0.15가 있습니다.다차원 배열 만들기

테이블 stock

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, 하루 29 %와 나머지 2 일 0.10. 퍼센트 0.00과 다른 이틀간의 새로운 날 29 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 
       ) 

     ) 

) 

를 얻기가 어떻게 각각의 배열에서 삼일을 삽입 할 수 있습니다?

답변

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); 
시도
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; 
} 

참고를 사용하여 다른 방법으로 위의 답을 향상 :이 방법은 중복 된 항목을 저장하지 않습니다.

문서 :