首页 > 解决方案 > 使用键组合对象数组

问题描述

我想组合两个对象数组。让我给你举个例子:

例子:

// First array:

       $array1 = [
         { name => 'Joe', p_id => 1 },
         { name => 'Bob', p_id => 2 },
         { name => 'Sam', p_id => 4 }
        ]
// Second array:

       $array2 = [
         { id => 1, name => 'X'  },
         { id => 2, name => 'Y'  },
         { id => 4, name => 'Z'  }
        ]

预期输出:

 $output = [
  { name => 'Joe + X', id => 1 },
  { name => 'Bob + Y', id => 2 },
  { name => 'Sam + Z', id => 4 }
 ]

目标:

我希望以最快的方式将name第二个数组中的name属性与第一个数组中的属性结合起来。

注意:p_id一个数组中的属性与第二个数组中的属性相同id

我尝试什么:

我使用了速度非常低的嵌套循环。

标签: phparrays

解决方案


array_map是解决方案!

鉴于:

$first = [
    { name => 'Joe', p_id => 1 },
    { name => 'Bob', p_id => 2 },
    { name => 'Sam', p_id => 4 },
];

$second = [
    { id => 1, name => 'X' },
    { id => 2, name => 'Y' },
    { id => 4, name => 'Z' },
];

解决方案很简单:

$result = array_map(
    static function (\stdClass $first, \stdClass $second): array {
        return [
            'name' => $first->name . ' + ' . $second->name,
            'id' => $first->p_id,
        ];
    },
    $first, $second
);

PS:我假设对象是\stdClass,用正确的替换它。


推荐阅读