【问题标题】:Check if an object exists in an array检查数组中是否存在对象
【发布时间】:2016-05-30 11:49:28
【问题描述】:

我有一个包含多个人员对象的数组,这些对象如下所示:

id: 1,
name: 'Max Muster',
email: 'max.muster@example.com',
language: 'German'

现在,我在另一个数组中找到了对象,但看起来并不完全相同:

id: 1,
name: 'Max Muster',
email: 'max.muster@example.com',
language: 'de'

我有一个 foreach 循环遍历数组 2 并检查数组 1 中是否存在对象。

foreach($array2 as $entry) {
    if(existsInArray($entry, $array1)) {
        // exists
    } else {
        // doesn't exist
    }
}

如果我的对象存在于数组中,是否有一个函数可以检查(比如我的 existsInArray())?我只需要检查一下,如果object-id存在,其他属性都没有关系。

【问题讨论】:

  • 使用array_diff检查两个数组是否相同。
  • 由于对象不同,所以不能简单的比较一下是否相同。什么使第一个数组中的对象与第二个数组中的对象匹配?一样的身份证?一样的名字?同一个邮箱?同一种语言?这些的某种组合?
  • 是的,需要将它们转换为数组而不是array_diff。
  • 如果您使用 id 作为数组键,这会变得更容易。
  • 只是id,必须相同

标签: php arrays object


【解决方案1】:

将对象放入数组时,使用对象 ID 作为键:

$array1[$object->id] = $object;

然后使用isset($array1[$object->id])检查$array中是否已经存在该对象:

if (isset($array1[$object->id])) {
    // object exists in array; do something
} else {
    // object does not exist in array; do something else
}

【讨论】:

  • 这看起来像是按索引检查,但索引不是任意的吗?这是如何工作的?
  • PHP Arrays 实际上是地图/哈希/字典。它们将数字或字符串键与任何类型的值相关联。 OP 有两组对象,由它们的id 属性标识。答案建议将第一组对象放在一个数组中,并使用id 作为键。处理完第二组对象时,使用对象id在数组中查找与id相同的对象。通过使用id 作为键(而不是自动生成的数字键),无需扫描整个数组即可识别对象。
【解决方案2】:

没有,但你可以写:

function existsInArray($entry, $array) {
    foreach ($array as $compare) {
        if ($compare->id == $entry->id) {
            return true;
        }
    return false;
}

【讨论】:

    【解决方案3】:
    foreach($array2 as $entry) {
        if(in_array($entry, $array1)) {
            // exists
        }  else {
        // doesn't exist
        }
    }
    

    使用 in_array 检查该特定对象是否存在于数组中

    【讨论】:

      【解决方案4】:

      使用in_array

      if(in_array($object, array)) {
         //exists
      } else {
         //does not exist
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-22
        • 1970-01-01
        • 1970-01-01
        • 2020-11-30
        • 1970-01-01
        • 1970-01-01
        • 2012-02-04
        • 1970-01-01
        相关资源
        最近更新 更多