比较两个数组并填充第一个数组

时间:2017-03-23 22:26:01

标签: php arrays

我有两个看起来像这样的数组,我只需要从$ 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;
    }
}

1 个答案:

答案 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检查必须移到内部循环之外,因为您必须等到搜索内循环中的每个项目。