2017-12-03 2 views
0

이 질문을 게시하기 전에 누군가가 솔루션에 가까워 지도록 도와 주었지만 필요에 따라 데이터를 표시 할 수없는 것처럼 보입니다.월별 총 매출 수를 표시합니다.

array(627) (

[0] => array(4) (
    [id]=> (int) 1 
    [name] => (string) Tesla 
    [total]=> (string) 24 
    [month] => (string) 4 
) 

[1] => array(4) (
    [id]=> (int) 1 
    [name] => (string) Tesla 
    [total]=> (string) 18 
    [month] => (string) 5 


[2] => array(4) (
    [id]=> (int) 1 
    [name] => (string) Tesla 
    [total]=> (string) 18 
    [month] => (string) 6 

[3] => array(4) (
    [id]=> (int) 2 
    [name] => (string) Audi 
    [total]=> (string) 16 
    [month] => (string) 4 
) 

[4] => array(4) (
    [id]=> (int) 2 
    [name] => (string) Audi 
    [total]=> (string) 18 
    [month] => (string) 5 

그것이 무엇을하는이 차의 각 유형과 매달 판매 정보를 저장하는 것입니다 :

나는 다음과 같은 구조를 가지고이 배열 $sales 있습니다. 몇몇 달에는 판매가 없으므로 그들은 비어 있습니다. 문제는

Car  Jan. Feb. Mar. Apr. May. Jun. Jul, Aug. Sept. Oct. Nov. Dec 
Tesla 0 0 0 24 18 18 0 0  0 0 0  0 
Audi  0 0 0 16 18 0 0 0  0 0 0  0 

가, 내가 가진 배열에만 개월 numer에 거기있는 경우에 총을 표시 는 내가 뭘 원하는 HTML 테이블에서 다음과 같은 자동차와 디스플레이 판매의 각 유형을 통해 루프입니다 그 달에 판매되었습니다. 테슬라의 경우 예를 들어 4, 5, 6 개월 만에 판매가 있었고 9 개월 이상 실종되었다. 내가 가진

도움말이었다 :

$result = []; 
foreach($sales as $sale) { 
    if(!isset($result[$sale['name']])) 
     $result[$sale['name']] = []; 

    if(!isset($result[$sale['name']][$sale['month']])) 
     $result[$sale['name']][$sale['month']] = $sale['total']; 
    else 
     $result[$sale['name']][$sale['month']] += $sale['total']; 
} 

이 괜찮지 만, 어떻게이 배열로 올해의 매달을지도 하는가? 판매하지 않고 개월 동안 0을 표시하려면 어떻게합니까?

이 문제를 도와 주시면 감사하겠습니다. 나를 위해 조금 복잡합니다.

업데이트 :

foreach($cars as $car){ 
     echo '<tr><td>'.$car .'</td>'; 
      for($i=1;$i<=12;$i++){ 
      if (isset($new[$i][$car])){ 
       echo '<td>'.$new[$i][$car] . '</td>'; 
      }else{ 
       echo '<td>'."0".'</td>'; 
      } 
     }  
     echo '</tr>'; 
} 
+0

배열을 복사하여 복사 할 수 있습니까? 'Var_export ($ sales);'를 복사하여 그 결과를 우리에게 붙여 넣습니다. 배열의 모든 단일 행을 편집하는 것은 매우 어렵습니다. – Andreas

+0

댓글이나 내 답변에 아무 것도 없습니까? – Andreas

+0

@ Andreas 정말 죄송합니다.이 솔루션을 이용해 주셔서 감사합니다. 매우 간단하고 이해하기 쉽습니다. –

답변

0

인 내부 배열을 초래 처음에는 월을 첫 번째 키로하고 새 차수를 차를 키로, 값을 판매로 새 배열을 작성합니다.

그런 다음 모든 자동차를 array_column으로 가져 와서 array_unique로 중복을 분류합니다.

다음 달 (1-> 12)을 반복하고 date() 월로 출력합니다.
그런 다음 자동차를 반복하여 값 (매출액)을 출력합니다. PHP는 시험을 위해

foreach($sales as $sale){ 
    $new[$sale["month"]][$sale["name"]] = $sale["total"]; 
} 

$cars = array_unique(array_column($sales, "name", "id")); 
$cars[] = "Sum"; // add a car named "Sum" for later use of displaying the sum 
//Var_dump($cars); 
echo "<table>\n<th>Car</th>"; 

for($i=1;$i<=12;$i++){ 
    echo "<th>" . date("M", strtotime("2017-$i-01")) . "</th>"; // create header 
    foreach($cars as $car){ // loop through the cars and add zero values to months if there is no sales on each car. 
     if(!isset($new[$i][$car])){ 
      $new[$i][$car] = 0; // add months with 0 values 
     } 
    } 
    $new[$i]["Sum"] = array_sum($new[$i]); // sum the month sales and add it to car "Sum" 
} 
ksort($new); // sort it on keys (months); 

//output each car in a table (including "Sum") using array_column and implode 
foreach($cars as $key => $car){ 
    If($car != "Sum"){ 
     echo "\n<tr><td><a href='$key'>$car</a></td><td>" . implode("</td><td>", array_column($new, $car)). "</td></tr>"; 
    }Else{ 
     echo "\n<tr><td>$car</td><td>" . implode("</td><td>", array_column($new, $car)). "</td></tr>"; 
    } 
} 

echo "</table>"; 

:
https://3v4l.org/tZNOK
가 실제 출력이 무엇인지 보려면 :
https://jsfiddle.net/gfjdcj4r/

편집, array_sum을 추가했다.
편집; 추가 된 HTML 테이블 편집; array_column의 세 번째 옵션을 사용하여 ID를 앵커로 추가했습니다.
이것은 $ cars의 열쇠를 id로 만듭니다.
그러면 앵커로 출력됩니다.

+0

이것은 아주 깨끗한 해결책입니다. 한 달에 총 인쇄를 도와 주시겠습니까? –

+0

나는 첫 번째 키를 월로 사용하기 때문에 array_sum을 사용하여 월 합계를 쉽게 합계 할 수 있습니다. @MegMeg – Andreas

+0

이것은 대단하다, 나는이 해결책을, 대단히 감사한다! –

0

이 $를 반복 다른 표시, 0으로 초기화 길이 12 해당 인덱스의 달에 값이 경우 변경의 배열을 지키는 intialized 값 자체

+0

고마워, 그거 좋은데, 문법 좀 도와 줄래? –

-1

시도 결과 어레이마다 "자동차"를 위해 1 내지 12하고 년대 "차"에 있으면 매달 수표 반복 여기서 w 하나 방법

$result = []; 
foreach($sales as $sale) { 
    if(!isset($result[$sale['name']])) 
     $result[$sale['name']] = []; 

    if(!isset($result[$sale['name']][$sale['month']])) 
     $result[$sale['name']][$sale['month']] = $sale['total']; 
    else 
     $result[$sale['name']][$sale['month']] += $sale['total']; 
} 

$totalSales = array(); 
foreach ($result AS $car=>$monthSales) { 
    print $car; 
    for($i=1;$i<=12;$i++) { 
     if(array_key_exists($i, $monthSales)) { 
      print $monthSales[$i]; // put here the names 
     } 
     else { 
      print "0"; 
     } 

     if(array_key_exists($i, $totalSales)) { 
      $totalSales[$i] = 0; 
     } 
     $totalSales[$i] += (isset($monthSales[$i])) ? $monthSales[$i] : 0; 
    } 
} 

for($i=1;$i<=12;$i++) { 
    if(array_key_exists($i, $totalSales)) { 
     print $totalSales[$i]; // put here the names 
    } 
    else { 
     print "0"; 
    } 
} 
+0

덕분에 도움이되었습니다. –

+0

매달 전체 성도 인쇄를 도와 주시겠습니까? 모든 차들? –

+0

더 많은 코드를 추가했습니다 ... 첫 번째 foreach 인쇄 중 ... 그리고 나서 몇 개월 동안 다시 반복하고 합계 – shushu304

관련 문제