如何检查PHP数组是关联数组还是顺序数组?

您所在的位置:网站首页 索引数组的键的数据类型是什么 如何检查PHP数组是关联数组还是顺序数组?

如何检查PHP数组是关联数组还是顺序数组?

2024-07-15 05:01| 来源: 网络整理| 查看: 265

PHP将所有数组视为关联数组,因此没有任何内置函数。 谁能推荐一种相当有效的方法来检查数组是否仅包含数字键?

基本上,我希望能够区分以下两者:

$sequentialArray = array('apple', 'orange', 'tomato', 'carrot');

和这个:

$assocArray = array('fruit1' => 'apple', 'fruit2' => 'orange', 'veg1' => 'tomato', 'veg2' => 'carrot'); #1楼

这两个得分最高的示例在$array = array('foo' => 'bar', 1)类的$array = array('foo' => 'bar', 1)无法正常工作

#2楼

我认为,如果数组的任何键不是整数(例如浮点数和空字符串”),则应将其视为关联数组。

同样,非排序整数也必须被视为关联(0,2,4,6),因为这种数组不能通过以下方式与for循环一起使用:

$n =count($arr); for($i=0,$i "b"); // Hexadecimal notation. 字符串键

这些数组的键是字符串 :

array("fish and chips" => "b"); array("" => "b"); // An empty string is also a string. array("[email protected]" => "b"); // Strings may contain non-alphanumeric characters. array("stack\t\"over\"\r\nflow's cool" => "b"); // Strings may contain special characters. array('$tα€k↔øv∈rflöw⛄' => "b"); // Strings may contain all kinds of symbols. array("functіon" => "b"); // You think this looks fine? Think again! (see https://stackoverflow.com/q/9246051/1402846) array("ま말轉转ДŁ" => "b"); // How about Japanese/Korean/Chinese/Russian/Polish? array("fi\x0sh" => "b"); // Strings may contain null characters. array(file_get_contents("https://www.google.com/images/nav_logo114.png") => "b"); // Strings may even be binary! 看起来像字符串的整数键

如果您认为array("13" => "b")是字符串 , 那么您错了 。 从这里的文档:

包含有效整数的字符串将转换为整数类型。 例如,键“ 8”实际上将存储在8以下。另一方面,“ 08”将不是强制转换,因为它不是有效的十进制整数。

例如,这些数组的键是整数 :

array("13" => "b"); array("-13" => "b"); // Negative, ok.

但是这些数组的关键是字符串 :

array("13." => "b"); array("+13" => "b"); // Positive, not ok. array("-013" => "b"); array("0x1A" => "b"); // Not converted to integers even though it's a valid hexadecimal number. array("013" => "b"); // Not converted to integers even though it's a valid octal number. array("18446744073709551616" => "b"); // Not converted to integers as it can't fit into a 64-bit integer.

而且,根据文档 ,

整数的大小取决于平台,尽管通常的最大值约为20亿(32位带符号)。 64位平台的最大值通常约为9E18(Windows始终为32位)。 PHP不支持无符号整数。

因此,此数组的键可以是整数 ,也可以不是 整数 -这取决于您的平台。

array("60000000000" => "b"); // Array key could be integer or string, it can fit into a 64-bit (but not 32-bit) integer.

更糟的是,PHP趋向于车如果整数是2 31 = 2,147,483,648边界(参见邻近错误51430 , 错误52899 )。 例如,在我的本地环境(Windows 7上XAMPP 1.7.7上的PHP 5.3.8)上, var_dump(array("2147483647" => "b"))给出

array(1) { [2147483647]=> string(1) "b" }

但在此使用键盘的现场演示 (PHP 5.2.5)上,相同的表达式给出了

array(1) { ["2147483647"]=> string(1) "b" }

因此,即使2147483647是有效的带符号32位整数 ,密钥在一个环境中也是一个整数 ,而在另一个环境中是一个字符串 。

#6楼

我认为标量数组的定义会因应用程序而异。 也就是说,某些应用程序将需要更严格地理解标量数组,而某些应用程序将需要更宽松的意义。

下面,我介绍三种不同严格性的方法。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3