关于
Buy Me a Coffee
归档
友链
猫咪
RSS
后台
切换模式
返回顶部
首页
说说
日常
开发
游戏
资源
虚拟货币
首页
说说
日常
开发
游戏
资源
虚拟货币
关于
Buy Me a Coffee
归档
友链
猫咪
RSS
后台
PHP判断是否为索引数组、连续索引数组、关联数组、混合数组
开发
·
2018-08-05
·
更新于 2020-06-26
LiesAuer
### 名称定义 - 索引数组:所有键名都为数值型,注意字符串类型的数字键名会被转换为数值型。 - 连续索引数组:键名是连续性的数字。 - 关联数组:所有键名都为字符串型,注意字符串类型的数字键名会被转换为数值型。 - 混合数组:键名既有数值型也有字符串型。 ### 代码 ```php /** * 判断数组是否为索引数组 */ function is_indexed_array($arr) { if (is_array($arr)) { return count(array_filter(array_keys($arr), 'is_string')) === 0; } return false; } /** * 判断数组是否为连续的索引数组 * 以下这种索引数组为非连续索引数组 * [ * 0 => 'a', * 2 => 'b', * 3 => 'c', * 5 => 'd', * ] */ function is_continuous_indexed_array($arr) { if (is_array($arr)) { $keys = array_keys($arr); return $keys == array_keys($keys); } return false; } /** * 判断数组是否为关联数组 */ function is_assoc_array($arr) { if (is_array($arr)) { // return !is_indexed_array($arr); return count(array_filter(array_keys($arr), 'is_string')) === count($arr); } return false; } /** * 判断数组是否为混合数组 */ function is_mixed_array($arr) { if (is_array($arr)) { $count = count(array_filter(array_keys($arr), 'is_string')); return $count !== 0 && $count !== count($arr); } return false; } ``` ### 耗时测试 ```php // 对百万数组进行千次的循环判断 $arr = []; for ($i = 0; $i < 1000000; $i++) { $j = 0; $key = mt_rand(1, 100) >= 50 ? $j++ : md5(time(true)); $arr[$key] = md5(time(true) . time(true)); } $t = microtime(true); for ($i = 0; $i < 1000; $i++) { is_indexed_array($t); } echo microtime(true) - $t, "s\n"; $t = microtime(true); for ($i = 0; $i < 1000; $i++) { is_assoc_array($t); } echo microtime(true) - $t, "s\n"; $t = microtime(true); for ($i = 0; $i < 1000; $i++) { is_continuous_indexed_array($t); } echo microtime(true) - $t, "s\n"; $t = microtime(true); for ($i = 0; $i < 1000; $i++) { is_mixed_array($t); } echo microtime(true) - $t, "s\n"; // 输出 // 0.0019919872283936s // 0.0020020008087158s // 0.0021991729736328s // 0.0019669532775879s ``` ### 测试结果 对百万数组进行千次的循环判断均为毫秒级
如果您觉得文章或项目对您有帮助,戳我请博主喝一杯咖啡叭!
取消回复
提交评论
瞅一瞅叭
域名出售
uterminal.ai
服务器推荐
RackNerd 2C2G $20.98/年(美国 隐藏款)
狗云 1C0.75G ¥150/年(香港 BGP)
最新评论
人: 不是怎么意外的连上外网?
志航: 可以试着把文件上传蓝奏云,这么干的样例很多
志航: QQ群加不进去
tinker: 为什么运行一段时间就会停止,重启又恢复!没有报错信息,频道信息和...
pansoo: 大佬,这个只能下载文件吗?能不能保存频道消息
Miller: 最好再多加一个查漏补缺的功能(捂脸(/ω\)),因为抓取了3天才...
Miller: 大佬,好像不会爬取jpeg文件,图片和视频数量对不上,是不是图片...
关于站长
广东 佛山
liesauer#liesauer.net
LiesAuer
CC BY-NC-SA 4.0
粤ICP备16094588号-1
萌ICP备20245567号
Theme
Jasmine
by
Kent Liao