Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何代表键值合并数组_Php_Arrays_Merge - Fatal编程技术网

Php 如何代表键值合并数组

Php 如何代表键值合并数组,php,arrays,merge,Php,Arrays,Merge,我有一个数组 { Array ( [0] => Array ( [filterType] => checkbox [sfid] => a1d1I000000jrmwQAA [name] => Publication Year [specValues] => Array ( [c

我有一个数组

{
Array
(
    [0] => Array
        (
            [filterType] => checkbox
            [sfid] => a1d1I000000jrmwQAA
            [name] => Publication Year
            [specValues] => Array
                (
                    [count] => 3
                    [value] => 1953
                )

        )

    [1] => Array
        (
            [filterType] => checkbox
            [sfid] => a1d1I000000jrmwQAA
            [name] => Publication Year
            [specValues] => Array
                (
                    [count] => 1
                    [value] => 1954
                )

        )

)



}
但若sfid相同,我想合并数组,也就是说,我想要结果

{
Array
(
    [0] => Array
        (
            [filterType] => checkbox
            [sfid] => a1d1I000000jrmwQAA
            [name] => Publication Year
            [specValues] => Array(
                                  [0]     =>array(
                                                    [count] => 3
                                                    [value] => 1953
                                                )
                                  [1]     =>array(
                                                    [count] => 1
                                                    [value] => 1954
                                                )

                                    )
         )
         )


}

您只需要迭代您的数组并将该行添加到输出中(如果它不在输出中)(您可以使用sfid作为键),然后将specvalue添加到正确的行中

<?php

$input = [
  [ 
    'filterType' => 'checkbox',
    'sfid' => 'a1d1I000000jrmwQAA',
    'name' => 'Publication Year',
    'specValues' => [
      'count' => 3,
      'value' => 1953,
    ],
  ],
  [ 
    'filterType' => 'checkbox',
    'sfid' => 'a1d1I000000jrmwQAA',
    'name' => 'Publication Year',
    'specValues' => [
      'count' => 1,
      'value' => 1954,
    ],
  ],
];

$data = [];
foreach ($input as $row) {
  if (!isset($data[$row['sfid']])) {
    $data[$row['sfid']] = [
      'filterType' => $row['filterType'],
      'sfid' => $row['sfid'],
      'name' => $row['name'],
      'specValues' => [],
    ];
  } 
  
  $data[$row['sfid']]['specValues'][] = $row['specValues'];
}

var_dump(array_values($data));

我假设如果sfid是相同的,那么filterType和name也是相同的。

到目前为止您做了什么?你能提供你的代码吗?我仍在努力得到我想要的结果,但我失败了,欢迎来到StackOverflow。请阅读,向我们展示您的代码,并向我们展示失败的原因。
array(1) {
  [0]=>
  array(4) {
    ["filterType"]=>
    string(8) "checkbox"
    ["sfid"]=>
    string(18) "a1d1I000000jrmwQAA"
    ["name"]=>
    string(16) "Publication Year"
    ["specValues"]=>
    array(2) {
      [0]=>
      array(2) {
        ["count"]=>
        int(3)
        ["value"]=>
        int(1953)
      }
      [1]=>
      array(2) {
        ["count"]=>
        int(1)
        ["value"]=>
        int(1954)
      }
    }
  }
}