Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 - Fatal编程技术网

用PHP合并数组中的数据

用PHP合并数组中的数据,php,arrays,Php,Arrays,我有这种类型的数组 Array ( [0] => Array ( [id] => 90 [name] => Paul [company] => Google [date] => 2018-01-06 [total] => 100.00 ) [1] => Array (

我有这种类型的数组

Array
(
    [0] => Array
        (
            [id] => 90
            [name] => Paul
            [company] => Google
            [date] => 2018-01-06
            [total] => 100.00
        )
    [1] => Array
        (
            [id] => 90
            [name] => Paul
            [company] => Google
            [date] => 2018-07-06
            [total] => 100.00
        )
    [2] => Array
        (
            [id] => 89
            [name] => Ethan
            [company] => Yahoo
            [date] => 2018-07-10
            [total] => 1140.00
        )
)
我需要通过合并
id
name
来从上一个数组创建一个新数组(如果它们相同)

所需输出应为:

[[
    [id] => 90
    [name] => Paul
    [company] => Google,
    [data] => [
        [date] => 2018-01-06,
        [total] => 100.00
    ],
    [
        [date] => 2018-07-06,
        [total] => 100.00
    ],
], [
    [id] => 89
    [name] => Ethan
    [company] => Yahoo
    [data] => [
        [date] => 2018-07-10,
        [total] => 1140.00
    ]
]]
我以前试过的:

$output = array();
foreach($input as $data){
    $output[$data['id']][] = $data;
    $output[$data['name']][] = $data;
    $output[$data['company']][] = $data;
}
请问我这里缺什么


谢谢。

这应该是您想要的:

foreach ($arr as $a) {
    if (empty($resp[$a['id']])) {
        $resp[$a['id']] = [
            'id' => $a['id'],
            'name' => $a['name'],
            'company' => $a['company'],
            'data' => []
        ];
    }
    $resp[$a['id']]['data'][] = [
        'date' => $a['date'],
        'total' => $a['total']
    ];
}

这是假设您只关心将日期和总计分组到重复的公司和名称中。

因此,您不需要重复,或者只要检查两个连续的元素是否相同就足够了?此外,如果您从数据库中获取数据,我觉得您可以通过修改查询而不是php代码来解决此问题。这可能更重要efficient@Lemures,我只需要检查
id
,但我不希望每次都重复相同的信息
name
company
。所需的输出无效。“Google”后面不能跟数组。必须将该数组分配给新属性。我再次建议您重新考虑sql查询。如果你给我看看桌子的结构,我可能会帮你。这正是我需要的。谢谢。如何删除第一级信息
[90]=>数组…
并直接从
开始([KDX_Id]=>90
KDX_Id
是什么意思?是否只希望数组从
0
开始,而不是从
Id
开始?是的。将其最小化。可以使用
数组值()
。循环后,可以调用
$resp=Array_值($resp)