是否可以声明一个数组元素键而不是定义一个值(如非数组变量)?这样,如果你有一个关联的布尔数组,你只需要检查键是否存在而不是指定一个布尔值。但是,在检查密钥是否存在时,您仍然可以不必遍历数组。
这将是一项节省空间的措施。看起来“null”会分配空间。
答案 0 :(得分:2)
没有。数组元素始终具有键和值,但是如果您不关心(即空字符串),您可以将任何内容作为值。在您的情况下,您应该将这些键添加到您的数组中,这些键值很重要,即true
。然后,当你将要找到它并且无法找到你可以假设它是错误的。但总的来说,你做错了。你并不是真的在这里保存,而是让你的代码不干净,难以阅读和维护。不要这样做
答案 1 :(得分:1)
如果您不想拥有类似于accoc数组的字典结构,那么您只需要一组值,如下所示:
$array = ('red', 'green', 'blue');
要检查密钥(项目)是否存在,只需使用in_array()
:
if(in_array('red', $array)) {
// -> found
}
但是,您应该注意,在这种情况下,php将在内部创建数字指示。
另一种方法是将TRUE分配给所有值。这至少会占用更少的内存。喜欢这个
$array (
'red' => TRUE,
'green' => TRUE,
'blue' => TRUE
);
并使用isset()
检查存在状态:
if(isset($array['red'])) {
// -> found
}
注意:我不建议您使用NULL
作为值。这是因为在这种情况下您不能使用isset()
,因为如果键的值为NULL,则isset将返回false。在这种情况下,您必须使用array_key_exists()
,这比isset()
慢得多。
结论:在处理器和内存消耗方面,我建议使用PHP的第二个建议。内存消耗应与数字数组相同,但搜索操作已经过优化。
答案 2 :(得分:1)
如果我理解正确的话。 您打算使用这样的关联数组:
key value
"bool1" ""
"bool2" ""
"bool3" ""
如果存在密钥,则bool为“true”。
为什么不使用像这样的普通数组?:
key value
1 "bool1"
2 "bool2"
3 "bool3"
如果值存在,则bool为“true”。
答案 3 :(得分:-1)
是的,这是可能的。您还可以使用array_key_exists检查这些值。 PHP从实际的数据存储中分离变量名称的哈希映射(如果您感兴趣,可以在zval上使用google)。有了这个说法,数组还必须为每个元素都有一个相关的“桶”结构,这取决于你的操作系统和编译选项可以大到96字节/每。 Zval也是多达48个字节,顺便说一句。
我不认为你有可能从这个方案中获得更多的价值,但纯粹从假设的角度来看,你可以存储一个空值。
<?php
$foo = array('a' => null, 'b' => null);
if (array_key_exists('a', $foo))
echo 'a';
与初始化为布尔值相比,这不会为您节省任何内存。然后,这将允许您执行一个比使用函数调用array_key_exists更快的isset。
<?php
$foo = array('a' => true, 'b' => true);
if (isset($foo['a']))
echo 'a';