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);
打破
}
}
}
完全正确!谢谢!:)