2012-01-21 2 views
0

배열의 값을 병합하고 연관성을 없애기 위해 전체를 평평하게 배열해야한다. 나는이 일을하고 있지만, 나는 더 나은 길을 찾기를 희망했다.PHP; assoc을 반복합니다. 배열을 만들고 모든 값을 더한다.

여기에 배열, 본질적으로,이다 :

array (
    [label] => array(
     [0] => array(
      key => val 
     ) 
     [1] => array(
      key => val 
     ) 
    ) 
    [label2] => array(
     [0] => array(
      key => val 
     ) 
    ) 

는 내가 함께 할 것은에서 모든 값을 추가하는 것입니다 [0] [1] ASSOC 당. 배열과 출력이 1 개 배열을 반환 무엇인가 :

array (
    [label] => array(
     [0] => array(
      key => SUM(val1+val2) 
     ) 
    ) 
    [label2] => array(
     [0] => array(
      key => val 
     ) 
    ) 

나는이 작업을 수행 :

$i = array(); 

foreach ($array AS $key => $val) { 
    $i[$key] = NULL; 

    foreach ($val AS $r) foreach ($r AS $k => $v) { 
     if (count($array[$key]) > 1) { // Add value. 
      $i[$key][$k] += $v; 

     } else { // Leave alone. 
      $i[$key][$k] = $v; 
     } 
    } 
} 

그럼 사용하여 하나 개의 큰 배열을 평평 :

$array = array(); 

$r = new RecursiveIteratorIterator(
    new RecursiveArrayIterator($array) 
); 

foreach ($r as $key => $val) 
    $array[$key] = $val; 

return $array 

나는 이것이 추악하며 훨씬 더 효율적인 방법으로 행해질 수 있다고 생각한다. 나는 그것을 이해할 수 없으며 SPL이 나를 혼란스럽게합니다. 하지만 나는 배우고 싶다.

누군가 도움을 줄 수 있습니까?


나는 내가 그것을 알아 냈다고 생각한다

$data = array(); 
    $RII = new RecursiveIteratorIterator(
     new RecursiveArrayIterator($it) 
    ); 

    foreach($RII AS $key => $val) { 
     $data[$RII->key()] += $RII->current(); 
    } 

    $this->fullData = $data; 

내가 적은 코드에 필요한 모든 것을했다. 이 모양이 맞습니까?

답변

0
$data = array(); 
$RII = new RecursiveIteratorIterator(
    new RecursiveArrayIterator($it) 
); 

foreach($RII AS $key => $val) { 
    $data[$RII->key()] += $RII->current(); 
} 

$this->fullData = $data; 

위의 두 기능을 모두 대체합니다. 그것은 질문없이 다차원 배열을 통과하고 내가해야 할 일을 할 수있게 해줍니다.

관련 문제