PHP加入2个相同键值的数组

时间:2018-07-01 06:29:42

标签: php arrays laravel associative-array

我想知道如何解决这个问题。我有3个(三个)数组,它们在“数据”键中包含嵌套值,如下所示:

array:3 [
  0 => array:3 [
    "status" => "Terkirim"
    "warna" => "lightgreen"
    "data" => array:12 [
      0 => 0
      1 => 0
      2 => 0
      3 => 0
      4 => 0
      5 => 0
      6 => 3
      7 => 0
      8 => 0
      9 => 0
      10 => 0
      11 => 0
    ]
  ]
  1 => array:3 [
    "status" => "Selesai"
    "warna" => "lightblue"
    "data" => array:12 [
      0 => 0
      1 => 0
      2 => 0
      3 => 0
      4 => 0
      5 => 0
      6 => 3
      7 => 0
      8 => 0
      9 => 0
      10 => 0
      11 => 0
    ]
  ]
  2 => array:3 [
    "status" => "Selesai"
    "warna" => "lightblue"
    "data" => array:12 [
      0 => 0
      1 => 0
      2 => 0
      3 => 0
      4 => 0
      5 => 0
      6 => 0
      7 => 1
      8 => 0
      9 => 0
      10 => 0
      11 => 0
    ]
  ]
]

我的问题是,即使“状态”相同,如何联接“数据”呢?或者如果该值已经存在于同一索引键上,则求和值,这就是我要实现的目标:

array:3 [
  0 => array:3 [
    "status" => "Terkirim"
    "warna" => "lightgreen"
    "data" => array:12 [
      0 => 0
      1 => 0
      2 => 0
      3 => 0
      4 => 0
      5 => 0
      6 => 3
      7 => 0
      8 => 0
      9 => 0
      10 => 0
      11 => 0
    ]
  ]
  1 => array:3 [
    "status" => "Selesai"
    "warna" => "lightblue"
    "data" => array:12 [
      0 => 0
      1 => 0
      2 => 0
      3 => 0
      4 => 0
      5 => 0
      6 => 3
      7 => 1 <== the joined value 
      8 => 0
      9 => 0
      10 => 0
      11 => 0
    ]
  ]  
]

任何帮助将不胜感激...:)

2 个答案:

答案 0 :(得分:0)

您可以这样操作:

ERROR: invalid byte sequence for encoding "UTF8": 0x00 

答案 1 :(得分:0)

您可以使用array_reduce()将数组汇总为一个关联数组。使用array_values()将关联数组转换为简单数组。

$arr = //Your array
$result = array_values(array_reduce($arr, function($c, $v){
    if ( !isset( $c[ $v['status'] ] ) ) $c[ $v['status'] ] = $v;
    else foreach( $c[ $v['status'] ]['data'] as $key => &$val ) $val += $v['data'][$key];
    return $c;
}, array()));

echo "<pre>";
print_r( $result );
echo "</pre>";

这将导致:

Array
(
    [0] => Array
        (
            [status] => Terkirim
            [warna] => lightgreen
            [data] => Array
                (
                    [0] => 0
                    [1] => 0
                    [2] => 0
                    [3] => 0
                    [4] => 0
                    [5] => 0
                    [6] => 3
                    [7] => 0
                    [8] => 0
                    [9] => 0
                    [10] => 0
                    [11] => 0
                )

        )

    [1] => Array
        (
            [status] => Selesai
            [warna] => lightblue
            [data] => Array
                (
                    [0] => 0
                    [1] => 0
                    [2] => 0
                    [3] => 0
                    [4] => 0
                    [5] => 0
                    [6] => 3
                    [7] => 1
                    [8] => 0
                    [9] => 0
                    [10] => 0
                    [11] => 0
                )

        )

)