【问题标题】:How to differentiate falsey array values from falsey out-of-bounds indices in php?如何区分虚假的数组值和 php 中的虚假越界索引?
【发布时间】:2015-02-15 09:24:50
【问题描述】:

在 PHP 中,如何确定数组索引的值是否由于索引越界而为假?

例如,人们可能会错误地得出以下结论:$a$b 每个都至少有三个项目,因为两个数组中的第三个项目的比较声称在索引 2 处具有相同的值,当实际上数组$b 中没有索引2。事实上,这两个值都是null

$a = array(1, false, null, 1, 0);  
$b = array(true, 0);

echo (int)($a[0] === $b[0]); // 0  
echo (int)($a[1] === $b[1]); // 0  
echo (int)($a[2] === $b[2]); // 1  null<declared>===null<index-out-of-bounds>
echo (int)($a[3] === $b[3]); // 0  
echo (int)($a[4] === $b[4]); // 0  

【问题讨论】:

  • 如果在循环中完成(或者我猜也是在外面),我会使用 array_key_exists 检查每个数组中是否存在每个键。

标签: php arrays indexing


【解决方案1】:

有趣的问题...可能是这样的(但仅适用于数字数组索引):

(int)(count($a)>=$i && count($b)>=$i && $a[$i]===$b[$i])

?

编辑:基于 array_key_exists 可能更好的解决方案:

(int)(array_key_exists($i, $a) && array_key_exists($i, $b) && $a[$i]===$b[$i] )

【讨论】:

  • 呃...我认为isset($a[$i]) 比任何count() 业务都好。
  • 也是我的第一个想法......但是“isset - 确定变量是否已设置且不为 NULL”,请参阅 php.net/manual/en/function.isset.php 。因此 isset 在 nul 值以及不存在的变量(或在 OP 中超出范围)返回 false。没有帮助...
猜你喜欢
  • 1970-01-01
  • 2019-05-23
  • 2011-12-31
  • 1970-01-01
  • 1970-01-01
  • 2015-12-30
  • 2017-11-23
相关资源
最近更新 更多