为何同样的输入给同样的函数,出来结果不一样
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了为何同样的输入给同样的函数,出来结果不一样,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2346字,纯文字阅读大概需要4分钟。
内容图文
![为何同样的输入给同样的函数,出来结果不一样](/upload/InfoBanner/zyjiaocheng/231/4ce75b782c254f38ad07c4c58684407f.jpg)
大家帮忙看一下,两次分别给函数输入数组,两次输入的数组用print_r打印出来看着是一样的,但是经过一个简单的函数之后出来结果就不一样了。看下面的代码和输出:
function getKey($arr) {
return $arrKey = array_keys($arr, 'aa');
}
$testArr = array('0'=>'XX','aa'=>'XX','1'=>'YY','bb'=>'YY','2'=>'ZZ','cc'=>'ZZ');
$array1 = array_keys($testArr);
$array2 = array('0', 'aa', '1', 'bb', '2','cc');
print_r($array1);
echo '
';
print_r($array2);
echo '
';
print_r(getKey($array1));
echo '
';
print_r(getKey($array2));
我这里的输出结果是这样的:
Array ( [0] => 0 [1] => aa [2] => 1 [3] => bb [4] => 2 [5] => cc )
Array ( [0] => 0 [1] => aa [2] => 1 [3] => bb [4] => 2 [5] => cc )
Array ( [0] => 0 [1] => 1 )
Array ( [0] => 1 )
前面两个一样,后面两个却不一样,我怀疑可能是输入的两个数组用print_r打印出来一样,但其实内部有东西是不一样的,但是怎样能看到这种不同呢?然后到底有什么不同呢?
希望懂的不吝赐教,先谢过了。
------解决方案--------------------
return $arrKey = array_keys($arr, 'aa',true);
会得到相同的结果
------解决方案--------------------
array_keys 中 0 和 '0' 是有区别的
这一点你可以用 var_dump 观察到
array_keys($arr, 'aa')
是返回值为 aa 的元素的键
当值为 0 时, 'aa' == 0 因为一边是数值,所以 aa 会转换为 0 进行比较,表达式成立
当值为 '0' 时, 'aa' == '0' 因为两边是字符串,无需转换,表达式不成立成立
------解决方案--------------------
function getKey($arr) {
return $arrKey = array_keys($arr, 'aa');
}
$testArr = array('0'=>'XX','aa'=>'XX','1'=>'YY','bb'=>'YY','2'=>'ZZ','cc'=>'ZZ');
$array1 = array_keys($testArr);
$array2 = array('0', 'aa', '1', 'bb', '2','cc');
var_dump($array1);
echo '
';
var_dump($array2);
echo '
';
print_r(getKey($array1));
echo '
';
print_r(getKey($array2));
echo '
';
$arr = array(0,'xx',0,'bb');
print_r(array_keys($arr, 'aa'));
?>
得到的结果:
array
0 => int 0
1 => string 'aa' (length=2)
2 => int 1
3 => string 'bb' (length=2)
4 => int 2
5 => string 'cc' (length=2)
array
0 => string '0' (length=1)
1 => string 'aa' (length=2)
2 => string '1' (length=1)
3 => string 'bb' (length=2)
4 => string '2' (length=1)
5 => string 'cc' (length=2)
Array ( [0] => 0 [1] => 1 )
Array ( [0] => 1 )
Array ( [0] => 0 [1] => 2 )
看出什么了吗 array_keys(array,value,strict)php是弱语言数字0被当成某个字符处理了 所以strict要指定为true
如果 strict 参数指定为 true,则 PHP 会使用全等比较 (===) 来严格检查键值的数据类型。
内容总结
以上是互联网集市为您收集整理的为何同样的输入给同样的函数,出来结果不一样全部内容,希望文章能够帮你解决为何同样的输入给同样的函数,出来结果不一样所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。