2017-08-16 146 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

相关问题