2017-08-16 73 views
-5

我有任意數量的數組,都具有相同的格式。我想總結鍵[15][17][16][22][18][19][20][21]的值,並把它添加到關鍵[1]添加某些鍵的值並追加到數組中的另一個鍵PHP

我現在有

foreach($some_array as $mvarray){ 

     $mvarray[1]= $mvarray[15]+=$mvarray[16]; 

    } 

出於測試目的,我只是想鍵15與​​鍵槽16添加到關鍵1.

陣列

[316] => Array 
     (
      [0] => 2017-08-15 00:00:00 
      [3] => RIF0976834 
      [9] => 6000 
      [10] => 2017-08-15 00:00:00 
      [12] => Some Name Here 
      [13] => Foo 
      [4] => Bar 
      [14] => ML350 
      [7] => 240 
      [8] => YENBR 
      [5] => 2.65 
      [6] => 1.10 
      [11] => RMBCY 
      [15] => 141.21 
      [17] => 0 
      [16] => 6.4 
      [22] => 0 
      [18] => 0 
      [19] => 2.2 
      [20] => 0 
      [21] => 0 
      [1] => 169.45 
      [2] => PRY 
     ) 
的一個例子10

正如您所看到的,我已經擁有的陣列在key[1]中包含一個值。我想遍歷所有陣列並使key[1]總和爲[15][17][16][22][18][19][20][21]

當我回顯出$mvarray[15]時,它回顯了key[15]的值。 我正在做的foreach循環似乎不起作用。

我做了$test = $mvarray[1]+=$mvarray[15];,它好像把keys[1][15]加在一起。所以我不知道爲什麼我的foreach循環不起作用。

任何幫助和指針,將不勝感激。

+0

你修改數組元素,它不會粘*除非你通過引用這樣做*請參閱http://php.net/manual/en /control-structures.foreach.php – deceze

+0

你知道要添加和存儲的索引!爲什麼你需要使用foreach! –

回答

1

foreach控制結構創建它迭代的數據的副本,這意味着$mvarray不是數組的條目,它是副本。修改它對陣列沒有影響。

爲了使您的代碼做你打算什麼做的,你必須訪問原始數組中的條目,您可以通過獲取兩個關鍵,並在您的foreach價值這樣做:

foreach($some_array as $mkarray => $mvarray) { 
    $some_array[$mkarray][1] = $some_array[$mkarray][15] += $some_array[$mkarray][16]; 
} 
1

您知道要從中提取值和的和的鍵。

  1. 生成您的目標密鑰數組($keys)。 (我已經生成了一個數組,其中包含鍵作爲值,然後將它們翻轉爲鍵。)
  2. 使用array_intersect_key()$keys可以篩選出$subarray中的任何不需要的元素。
  3. 使用array_sum()將所有值相加。
  4. 將總計添加到子數組的索引1

代碼:(Demo

$keys=array_flip([15,17,16,22,18,19,20,21]); 
$array=[316=>[0=>'2017-08-15 00:00:00',3=>'RIF0976834',9=>6000,10=>'2017-08-15 00:00:00', 
     12=>'Some Name Here',13=>'Foo',4=>'Bar',14=>'ML350',7=>240,8=>'YENBR',5=>2.65, 
     6=>1.10,11=>'RMBCY',15=>141.21,17=>0,16=>6.4,22=>0,18=>0,19=>2.2,20=>0, 
     21=>0,1=>169.45,2=>'PRY']]; 

foreach($array as &$a){ // make $a modifiable by reference 
    $a[1]+=array_sum(array_intersect_key($a,$keys)); // filter, sum, add to [1] 
} 
var_export($array); 
// $array[316][1] increased from 169.45 to 319.26 
+0

爲了清楚起見,我的答案是循環遍歷多維數組中的所有子數組。我的演示代碼中的數組只有一個迭代,因爲只有一個鍵爲「316」的子數組。如果你不想循環,只需使用'echo $ array [316] [1] + array_sum(array_intersect_key($ array [316],$ keys));'' – mickmackusa