当前位置: 首页 > 面试题库 >

如何检查数组元素是否存在?

姬念
2023-03-14
问题内容

示例:我正在检查是否存在像这样的数组元素:

if (!self::$instances[$instanceKey]) {
    $instances[$instanceKey] = $theInstance;
}

但是,我不断收到此错误:

Notice: Undefined index: test in /Applications/MAMP/htdocs/mysite/MyClass.php on line 16

当然,我第一次想要实例时,$ instances不会知道密钥。我想我对可用实例的检查是错误的?


问题答案:

您可以使用语言构造isset或函数array_key_exists

isset应该更快一些 (因为它不是函数 ,但是如果元素存在并且具有value,则将返回false NULL

例如,考虑以下数组:

$a = array(
    123 => 'glop', 
    456 => null, 
);

和这三个测试,依赖于isset

var_dump(isset($a[123]));
var_dump(isset($a[456]));
var_dump(isset($a[789]));

第一个会得到您( 该元素存在,并且不为null)

boolean true

虽然第二个可以帮助您 (该元素存在,但为null)

boolean false

最后一个会让你 (该元素不存在)

boolean false

另一方面,array_key_exists像这样使用:

var_dump(array_key_exists(123, $a));
var_dump(array_key_exists(456, $a));
var_dump(array_key_exists(789, $a));

您将获得这些输出:

boolean true
boolean true
boolean false

因为在前两种情况下,元素存在-即使在第二种情况下为null。而且,当然,在第三种情况下,它不存在。

对于像您这样的情况,我通常会使用isset,考虑到我永远不会在第二种情况下…但是,现在选择要使用哪种方式取决于您;-)

例如,您的代码可能会变成这样:

if (!isset(self::$instances[$instanceKey])) {
    $instances[$instanceKey] = $theInstance;
}


 类似资料:
  • 问题内容: 在Swift中,如何检查数组中是否存在元素?Xcode没有针对,,或的任何建议,并且快速搜索本书不会发现任何结果。知道如何检查吗?我知道有一种方法可以返回索引号,但是有没有一种方法可以返回像ruby一样的布尔值? 我需要的示例: 问题答案: 斯威夫特2、3、4、5: 是(用于元素序列的) 协议扩展方法 ,而不是早期版本中的全局方法。 备注: 该方法要求序列元素采用协议。 如果序列元素是

  • 在Swift中,如何检查数组中是否存在元素?Xcode没有关于、或的任何建议,并且在这本书中快速搜索没有任何结果。知道怎么查这个吗?我知道有一个方法返回索引号,但是有没有一个方法像Ruby的那样返回一个布尔值? 我需要的示例:

  • 问题内容: 我现在用来检查此功能的函数如下: 有用。我正在寻找的是是否有更好的方法来做到这一点。 问题答案: ECMAScript 2016 包含一种专门用于解决问题的数组方法,因此现在是首选方法。 _从2018年7月开始,如果您需要支持IE,则可以在polyfill中使用几乎所有 主流 浏览器。 编辑:请注意,如果数组中的项目是一个对象,则返回false。这是因为相似的对象是JavaScript

  • 问题内容: 我有一个看起来像元组的列表: 检查该元组中是否存在值的最佳方法是什么?例如,我想能够说: 并得到真 问题答案: 您正在寻找: 结合一个简单的生成器表达式,就可以完成任务。生成器表达式接受每个元组,如果包含则产生。然后在请求的第一个项目返回时返回(否则为)。因此,这就是您想要的。它也可以很好地读取- 如果有任何元组包含。 如果您要执行大量操作并且需要性能,那么可能值得设置所有值的集合以使

  • 问题内容: 我有一个数组,我需要检查该数组中是否存在元素,或者使用jq, fruit.json 从数组中获取该元素: 不起作用 问题答案: “包含”的语义一点都不简单。通常,最好使用“索引”来测试数组是否具有特定值,例如 IN / 1 如果您的jq有更好的解决方案,则使用它: 如果您的jq具有(与jq 1.5一样),那么这里是一个使用的快速定义:

  • 问题内容: 如何检查是否具有或的值? 问题答案: 使用? 顺便说一句,您要为键分配一个值两次,因此您的数组将导致一个只有一个值的数组。