我有两个看起来像这样的数组,我只需要从$ allItems获取id为3的对象并将其放在$ existingItems数组中,我尝试了类似这样的东西,但我不能仅仅采用不存在的元素$ existingItems。
$existingItems = array[{
id: 1
name: 'jon doe',
events: [{..},{..}]
},{
id: 2,
name: 'jane doe',
events: [{..},{..}]
}]
$allItems = array[{
id: 1
name: 'jon doe'
events: null
},{
id: 2,
name: 'jane doe',
events: null
},{
id: 3,
name: 'David Beckam',
events: null
}];
foreach ($existingItems as $key => $existingValue) {
$found = false;
foreach ($allItems as $key => $value) {
if($existingValue['id'] === $value['id']) {
$found = true;
break;
}
if($found == false)
$existingItems [] = $value;
}
}
答案 0 :(得分:1)
您的foreach
循环输入顺序错误。由于您在外循环中循环现有数组,并且现有数组没有任何id = 3,因此无法找到它。您需要将$allItems
作为外部循环并将$existingItems
作为内部循环,如下所示:
foreach ($allItems as $value) {
$found = false;
foreach ($existingItems as $key => $existingValue) {
if($existingValue['id'] === $value['id']) {
$found = true;
break;
}
}
if($found == false) {
$existingItems[] = $value;
}
}
另请注意,$found == false
检查必须移到内部循环之外,因为您必须等到搜索内循环中的每个项目。