2013-04-12 3 views
0

나는이 다차원 배열 (고객이 무엇인지 불렀다면)을 고객에게 가지고 있고 고객 내부에는 그의 항목과 그 항목에 대한 요금이 있습니다. 그러나 항목에서 모든 수수료를 받고 고객에게 합산하십시오. 배열 구성은예측할 수없는 키를 가진 다차원 배열의 합

Array 
    (
     [6bb728] => Array 
      (
       [TitleName] => Sir Isaac 
       [Surname] => Newton 
       [sum] => 
       [id] => 6bb728 
       [items] => Array 
        (
         [29] => Array 
          (
           [AssignedTo] => 6bb728 
           [Number] => 03-014 
           [MFee] => 103.5 
          ) 

        ) 

      ) 

합 키 항목 비용의 합을 포함한다. 어느 날 내 질문에 데려 오 : 다차원 배열에 존재하는 하나의 열쇠의 합계를 얻는 효율적인 방법 있는가?

내가 루프에 컴퓨터를 보낸 배 foreach 문을 시도했습니다 (이 고객의 수백이 있고 그렇게 많은 루프를해야 할 것) 당신이 그것을 줄일 수처럼

foreach($customers as $value) { 
    foreach($value as $value1){ 
     foreach($value1['items'] as $value2) { 
      foreach($value2 as $value3) { 
       $customers[$value3['AssignedTo']]['Fee'] += $value3['MFee']; 
      } 
     } 
    } 
} 
+1

'에서 오는 moorings' 않습니다 걸쳐

Array ( [0] => Array ( [a] => aaa [b] => bbb ) [1] => Array ( [c] => ccc [d] => dddd ) [2] => Array ( [e] => eeee ) ) 

나누어

을 형성? – Gareth

+0

죄송합니다. 비슷한 구조의 다른 배열에 있었기 때문에 질문을 편집했습니다. – PwnageAtPwn

답변

2

가 보이는 :

foreach($customers as $customer) { 
    foreach($customer['items'] as $item) { 
     $customers[$item['AssignedTo']]['Fee'] += $item['MFee']; 
    } 
} 

편집 : 실제로 당신이 너무 좀 덜 혼란 그 할당을 만들 수 있습니다

$customer['Fee'] += $item['MFee']; 
+0

완벽하게 작동합니다! 약간의 속도 감소,하지만 그것은 거대한 배열로 나는 그것을 먹이로 예정이다. – PwnageAtPwn

+1

@PwnageAtPwn 네, 중첩 된 루프는 항상 성능면에서 약간의 쓰레기가 될 것입니다. 속도가 문제가된다면 어레이 구조를 약간 변경하여 [array_sum'] (http://php.net/manual/en/function.array-sum.php)과 같은 것을 사용할 수 있도록해야합니다. . – Gareth

0

고객을 반복하면서 중첩 루프가 아닌 multiple loops을 사용하십시오.

예 :

<?php 
$input_array = array('a' => 'aaa', 'b' => 'bbb', 'c' => 'ccc', 'd' => 'dddd', 'e' => 'eeee'); 

//chunks of size 2 
$my_array_chunks = array_chunk($input_array, count($input_array)/2, true); 
?> 

// 배열 덩어리는 여러 루프

<?php 
foreach(my_array_chunks[0] as $val){ 
    //code here 
} 
foreach(my_array_chunks[1] as $val){ 
     //code here 
} 

foreach(my_array_chunks[2] as $val){ 
    //code here 
} 

Why is one loop so much slower than two loops?

관련 문제