首页 > 解决方案 > 如何按值和类型合并数组

问题描述

我有以下数组:

Array ( 
    [0] => Array ( 
        [id] => 1 
        [name] => Apple
        [type] => Fruit 
    ) 
    [1] => Array ( 
        [id] => 3 
        [name] => Chanterelles
        [type] => Vegetable
    ) 
    [2] => Array ( 
        [id] => 4 
        [name] => Lenses
        [type] => Legume
    ) 
    [3] => Array ( 
        [id] => 2 
        [name] => Banana
        [type] => Fruit
    ) 
    [4] => Array ( 
        [id] => 5 
        [name] => Rocket
        [type] => Vegetable
    ) 
)

我的预期输出:

Array (
    [Fruit] => Array (
        Array (
            [id] => 1 
            [name] => Apple
        )
        Array (
            [id] => 2
            [name] => Banana
        )
    )
    [Vegetable] => Array (
        Array (
            [id] => 3
            [name] => Chanterelles
        )
        Array (
            [id] => 5
            [name] => Rocket
        )
    )
    [Legume] => Array (
        Array (
            [id] => 4
            [name] => Lenses
        )
    )
)

我的初始数组:

var_dump(array(
    array(
        'id' => 1,
        'name' => 'Apple',
        'type' => 'Fruit'
    ),
    array(
        'id' => 3,
        'name' => 'Chanterelles',
        'type' => 'Vegetable'
    ),
    array(
        'id' => 4,
        'name' => 'Lenses',
        'type' => 'Legume'
    ),
    array(
        'id' => 2,
        'name' => 'Banana',
        'type' => 'Fruit'
    ),
    array(
        'id' => 5,
        'name' => 'Rocket',
        'type' => 'Vegetable'
    )
));

我尝试了以下方法:

foreach($myarray as $ingredient){
    $type_arr[] = $ingredient['type'];
}
$type_arr_uq = array_unique($type_arr);
$new_arr = array();
foreach($type_arr_uq as $type){
  foreach($myarray as $ingredient){
      if($type == $ingredient['type']){
          $new_arr[$type] = ['id' => $ingredient['id'], 'name' => $ingredient['name']];
      }
    }
}

输出:

Array
(
    [Fruit] => Array
        (
            [id] => 2
            [name] => Banana
        )

    [Vegetable] => Array
        (
            [id] => 5
            [name] => Rocket
        )

    [Legume] => Array
        (
            [id] => 4
            [name] => Lenses
        )

)

演示:http ://sandbox.onlinephpfunctions.com/code/4886faa73b56b62fdf954f06e902f1d0bd301a71

标签: php

解决方案


$new_arr[$type] = ['id' => $ingredient['id'], 'name' => $ingredient['name']];

您正在覆盖此位置可能已经存在的数组条目 - 添加一个新条目:

$new_arr[$type][] = ['id' => $ingredient['id'], 'name' => $ingredient['name']];

推荐阅读