添加某些键的值并附加到数组PHP中的另一个键

时间:2017-08-16 08:52:01

标签: php arrays multidimensional-array foreach

我有任意数量的数组都具有相同的格式。我想对密钥[15][17][16][22][18][19][20][21]的值求和,并将其附加到密钥[1]

我目前拥有什么

    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
        )

如您所见,我已经拥有的数组包含key[1]中的值。我想循环遍历所有数组,并将key[1][15][17][16][22][18][19][20][21]

之和设为$mvarray[15]

当我回显key[15]时,它会回显$test = $mvarray[1]+=$mvarray[15];的值。 我正在做的foreach循环似乎不起作用。

我做了keys[1],似乎将[15]v-model="{{ 'filtres.transaccions["'.$atribut->tag.'"]' }}" 加在一起。所以我不知道为什么我的foreach循环不起作用。

任何帮助和指示都将不胜感激。

2 个答案:

答案 0 :(得分:1)

foreach控件结构会创建它迭代的数据的副本,这意味着$mvarray不是数组的一个条目,它是一个副本。修改它对您的阵列没有影响。

为了使您的代码能够执行您想要执行的操作,您必须从原始数组中访问该条目,您可以通过获取foreach中的键和值来实现:

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

答案 1 :(得分:1)

您知道要从中提取值的键和总和。

  1. 生成您的目标键数组($keys)。 (我已经生成了一个数组,其中键作为值,然后将它们翻转为键。)
  2. 使用array_intersect_key()$keys过滤掉$subarray中不需要的元素。
  3. 使用array_sum()添加所有值。
  4. 在子数组的索引1处添加总值。
  5. 代码:(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