当前位置: 首页 > 知识库问答 >
问题:

基于一个数组中的值和另一个数组中的键组合多维数组

程瑞
2023-03-14

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

阵列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函数可以用来完成这个任务?

共有1个答案

邰昀
2023-03-14

对于此示例数据,您可以按 make 为第一个数组编制索引

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

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

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

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

 类似资料:
  • 我有两个数组,$FULL_LIST和$ONLY_TITLES根据第一个键匹配值。 $FULL_LIST: : 我想从$only_title数组(其基本的长乘积标题)的第二个键中取值,并将其替换到数组中: : 我尝试过,但问题是它期望子数组的顺序是相同的。但是,正如您在两个数组中所看到的,第二个子数组并不匹配。在中,第二个子数组错误: 如何检查来自第一个键的值是否匹配?

  • 我想将表单域映射到数据库域。 我有两个数组。。 一个数组是数据,包含作为键的表单字段id和作为值的表单字段值。 我还有一个数组,打算用作地图。此数组的键与表单字段相同,值为数据库字段名。 我想做的是遍历数据数组,在数据键与映射键匹配的地方,给数据数组分配一个新的键,这个键就是映射数组的值。 我的问题是怎么做?我尝试了很多不同的方法,现在我完全迷失在其中。

  • 这看起来很容易,但却不知道该怎么做。当前数组数据是按日期和日期列出的,因此我需要将所有日期组合起来:天、月、6个月、1年。我需要将数组数据排列为下面的第二个数组。

  • 问题内容: 在PHP中可以做这样的事情吗?您将如何编写函数?这是一个例子。顺序是最重要的。 我想做类似的事情 因为最后我使用了foreach()并且它们的顺序不正确(因为我将值附加到需要正确顺序的字符串中,而且我事先也不知道所有的数组键/值)。 我看过PHP的内部数组函数,但似乎只能按字母或数字排序。 问题答案: 只需使用或即可。通过以给定的数组(按正确的顺序)开始并用实际数组中的数据覆盖/添加键

  • 问题内容: 如何有效地检查整数数组中的所有元素是否是Java中另一个数组的所有元素的子集?例如,[33 11 23]是[11 23 33 42]的子集。提前致谢。 问题答案: 从超集数组中取出一个。检查子集中数组的每个元素是否包含在中。这是非常快速的操作。

  • 问题内容: 说我有这些二维数组A和B。 如何从B中删除A中的元素。(集合论中的补语:AB) 更准确地说,我想做这样的事情。 问题答案: 基于this solution对,这里是用更少的内存占用与NumPy基础的解决方案,并与大型阵列工作时,可能是有益的- 样品运行- 在大型阵列上的运行时测试- 具有基础解决方案的时间- 基于更少内存占用量的定时解决方案- 进一步提升性能 通过将每一行视为索引元组来