示例:我正在检查是否存在像这样的数组元素:
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一样),那么这里是一个使用的快速定义:
问题内容: 如何检查是否具有或的值? 问题答案: 使用? 顺便说一句,您要为键分配一个值两次,因此您的数组将导致一个只有一个值的数组。