Php 使用键组合对象数组

Php 使用键组合对象数组,php,arrays,Php,Arrays,我想合并两个对象数组。让我举个例子: 示例: // First array: $array1 = [ { name => 'Joe', p_id => 1 }, { name => 'Bob', p_id => 2 }, { name => 'Sam', p_id => 4 } ] // Second array: $array2 = [ {

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

示例:

// 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
属性相同

我的尝试:

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

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

array\u 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\u映射(
静态函数(\stdClass$first\stdClass$second):数组{
返回[
'name'=>$first->name.+.$second->name,
'id'=>$first->p_id,
];
},
第一,第二
);

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

这里有一个解决方案,用于解决数组中元素的ID顺序不一致的问题。请注意,我已经更改了
$array1
的顺序。只比常规嵌套循环好一点,在
$array2
的循环上,它将删除“found”元素以提高下一个循环的速度

发件人:

解决方案:

$result = [];
foreach ($array1 as $array1Element) {
  for ($i=0;$i<count($array2);$i++) {
    if ($array1Element->p_id === $array2[$i]->id) {
      $array2[$i]->name = $array1Element->name . ' + ' . $array2[$i]->name;

      $result[] = $array2[$i];
      unset($array2[$i]);
      $array2 = array_values($array2);
      break;
  }
 }
}
$result=[];
foreach($array1作为$array1元素){
对于($i=0;$ip_id===$array2[$i]->id){
$array2[$i]->name=$array1Element->name.'+.$array2[$i]->name;
$result[]=$array2[$i];
未结算($array2[$i]);
$array2=数组_值($array2);
打破
}
}
}

完全正确!谢谢!:)