2012-01-21 7 views
0

私は配列の値をマージし、結合しないように全体をフラット化する必要があります。私はこれを働かせましたが、私はよりよい方法を見いだすことを望んでいました。PHP; assocを繰り返します。配列を作成し、すべての値を加算します。

ここで配列は、本質的に、です:

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

は、私はこれを行うことから、すべての値を追加することです[0]と[1]連想あたり。そして、私が使用して一つの大きな配列にそれを平らに

$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 

で、私はこれを行う

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

:出力のようなものである1つのアレイを、アレイと返します私はこれが醜いと思うし、はるかに効率的な方法で行うことができます。私はそれを理解できず、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; 

上記の両方の機能を置き換えます。それは問題なく多次元配列を通り、私が必要とすることを私に可能にします。

関連する問題