【问题标题】:Combine multi-dimensional arrays based on value from one array and key from another根据一个数组的值和另一个数组的键组合多维数组
【发布时间】:2023-04-03 18:14:01
【问题描述】:

我有两个多维数组,我想通过使用其中一个数组的值和另一个数组的键来组合它们。数组如下:

数组 1:

Array (
  [0] => Array (
    [make] => honda
    [type] => motorcycle
  )
  [1] => Array (
    [make] => toyota
    [type] => truck
  )
  [2] => Array (
    [make] => acura
    [type] => car
  )
  [3] => Array (
    [make] => subaru
    [type] => car
  )
)

数组 2:

Array (
  [honda] => Array (
    [10] => 16000
    [20] => red
    [30] => 2021
  )
  [toyota] => Array (
    [11] => 40000
    [23] => white
    [35] => 2019
  )
  [acura] => Array (
    [12] => 60000
    [25] => black
    [37] => 2020
  )
  [subaru] => Array (
    [181] => 32000
    [27] => blue
    [38] => 2018
  )
)

我想要生成的结果数组如下:

Array (
  [honda] => Array (
    [10] => 16000
    [20] => red
    [30] => 2021
    [type] => motorcycle
  )
  [toyota] => Array (
    [11] => 40000
    [23] => white
    [35] => 2019
    [type] => truck
  )
  [acura] => Array (
    [12] => 60000
    [25] => black
    [37] => 2020
    [type] => car
  )
  [subaru] => Array (
    [181] => 32000
    [27] => blue
    [38] => 2018
    [type] => car
  )
)

有没有我可以利用的 PHP 函数来完成这个?

【问题讨论】:

    标签: php arrays multidimensional-array


    【解决方案1】:

    对于这个示例数据,可以通过make索引第一个数组

    $array1 = array_column($array1, 'type', 'make');
    

    然后迭代第二个数组并为每个 make 附加第一个数组中的类型。

    foreach ($array2 as $make => $info) {
        $info['type'] = $array1[$make];
        $result[$make] = $info;
    }
    

    但是使用 make 作为键似乎很容易给您带来问题。我不知道您的数据来自哪里,但似乎不太可能有两个具有相同品牌的项目,这显然会使它无法正常工作。我建议找到一些您可能期望更独特的其他标识符。如果您可以访问它,VIN 可能是一个不错的选择。如果没有,您也许可以从每个数据源的多个相似方面构造一个复合键

    【讨论】:

    • 非常感谢!这很好用!欣赏关于“制造”作为关键的警告。我发布的数据只是模拟数据,幸运的是,我不必担心重复值。
    • 太棒了!我很高兴能提供帮助。我喜欢在我的回答中加入类似的警告,不一定是因为我认为提出问题的人需要它,但对于将来遇到问答的任何人,我认为答案的部分用处在于知道何时/你应该如何使用它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-09
    • 2021-06-18
    • 1970-01-01
    相关资源
    最近更新 更多