为了账号安全,请及时绑定邮箱和手机立即绑定

如何检查PHP数组是关联的还是连续的?

如何检查PHP数组是关联的还是连续的?

PHP
杨__羊羊 2019-07-13 16:36:59
PHP将所有数组视为关联数组,因此没有任何内置函数。有人能推荐一种比较有效的方法来检查数组是否只包含数字键吗?基本上,我希望能够区分这一点:$sequentialArray = array('apple', 'orange', 'tomato', 'carrot');这是:$assocArray = array('fruit1' => 'apple',                      'fruit2' => 'orange',                      'veg1' => 'tomato',                      'veg2' => 'carrot');
查看完整描述

3 回答

?
阿晨1998

TA贡献2037条经验 获得超6个赞

仅检查数组是否具有非整数键(而不是数组是顺序索引还是零索引):

function has_string_keys(array $array) {
  return count(array_filter(array_keys($array), 'is_string')) > 0;}

如果至少有一个字符串键,$array将被视为一个关联数组。


查看完整回答
反对 回复 2019-07-13
?
FFIVE

TA贡献1797条经验 获得超6个赞

这个问题中的许多评论者不理解数组是如何在PHP中工作的。从数组文档:

键可以是整数,也可以是字符串。如果键是整数的标准表示形式,它将被解释为整数(即“8”将被解释为8,而“08”将被解释为“08”)。键中的浮点数被截断为整数。索引数组类型和关联数组类型在PHP中是相同的类型,可以包含整数和字符串索引。

换句话说,不存在“8”的数组键,因为它总是被(静默地)转换为整数8。因此,尝试区分整数和数字字符串是不必要的。

如果您想要最有效的方法来检查数组中的非整数键,而不需要复制数组的一部分(就像Array_key()那样)或所有的(就像foreach那样):

function keyedNext( &$arr, &$k){
    $k = key($arr);
    return next($arr);}for ($k = key(reset($my_array)); is_int($k); keyedNext($my_array,$k))
    $onlyIntKeys = is_null($k);

这是因为当前数组位置无效时,key()返回NULL,而NULL永远不会是有效的键(如果您尝试使用NULL作为数组键,它将被静默地转换为“)。


查看完整回答
反对 回复 2019-07-13
  • 3 回答
  • 0 关注
  • 872 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信