2017-11-28 28 views
0

私はこのような配列を持っています。ループごとに計算された値を挿入する

    Array 
        (
         [0] => Array 
          (
           [0] => 1 
           [1] => 500 
           [2] => 800 
          ) 

         [1] => Array 
          (
           [0] => 1 
           [1] => 100 
           [2] => 200 
          ) 

         [2] => Array 
          (
           [0] => 1 
           [1] => 300 
           [2] => 400 
          ) 
        ) 

私はいくつかのことをするためにforeachループ(関数ではない)を使用したいと思います。最初に、サブ要素[2]からサブ要素[1]を減算してサブ要素[3]を生成し、サブ要素3を出力配列に挿入し直したいだけです。以下を参照してください:

$output= 
        Array 
        (
         [0] => Array 
          (
           [0] => 1 
           [1] => 500 
           [2] => 800 
           [3] => 300 
          ) 

         [1] => Array 
          (
           [0] => 1 
           [1] => 100 
           [2] => 200 
           [3] => 100 
          ) 

         [2] => Array 
          (
           [0] => 1 
           [1] => 400 
           [2] => 250 
           [3] => 150 
          ) 
        ) 

上記を実行するには、以下のfor eachループを使用してサブエレメント3の値を生成してください。私の問題は、適切な場所に出力配列に値を戻して挿入することです。私は失敗した私の最後の試みをコメントアウトしました。申し訳ありませんが私はここに明白な行方不明です。

   foreach($result as $sub) 
       { 
        //get values 
        $sub[3]=$sub[1]-$sub[2]; 
        echo "<difference>".$sub[3]."<br>";//works ok 

        //insert values back into array 
        //$result[$sub[0]][3] = $sub[3]; 
       } 

       print "<pre>"; 
       print_r($result); 
       print "</pre>"; 
       die(); 

答えて

5

問題:

$result[$sub[0]][3] = $sub[3]; //= $result[1][3] = $sub[3] 

$sub[0]常に1(あなたの入力配列に応じて)を返すので、それはあなたが探しているものではありません。

ソリューション:

はあなたforeachループ で$array as $key => $valの形式を使用して、該当するキーに応じてサブ配列にアクセスします。

 foreach($result as $key => $sub) 
     { 
      //get values 
      $result[$key][3]=$sub[1]-$sub[2]; 
+0

感謝オフィール。完璧な答え。とても速い。 – jimshot

+0

私はあなたの答えを数分で受け入れます。受け入れる前にタイムリミッターがあります! (あなたはその記録を打ち負かした) – jimshot

+0

あなたは大歓迎です。 –

2

あなたもarray_mapを使用することができ、それはよりエレガントです:

$output = aray_map(function ($item) { 
    $item[] = $sub[2] - $sub[1]; 
    return $item; 
}, $arr); 

Demo

+0

別の優れた答えです。ありがとうございました。私はOfirが、それぞれの解決策のために尋ねられた事実に応答していると思う。 – jimshot

+0

はい、私はそれを行う別の方法を示したいと思っています:) – YouneL

関連する問題