为什么同样的输入给同样的函数,出来结果不一样? php 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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' 因为两边是字符串,无需转换,表达式不成立成立 <?php 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 '<br>'; var_dump($array2); echo '<br>'; print_r(getKey($array1)); echo '<br>'; print_r(getKey($array2)); echo '<br>'; $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 会使用全等比较 (===) 来严格检查键值的数据类型。 感谢microlab2009和xuzuning的详细指导,这下很明白了。 php环境配置的问题 如何在mysql中用PHP插入日/月/年格式的日期呀!!大侠帮忙 MYSQL PDO 加载的问题?急迫!! 用怎么判断CURL是否启用 自定义函数在smarty里面怎么用? 输出格式 mysql 联合主键? php获取数组的个数? 麻烦列位,站内搜索如何做? 急急急!!!注册码!!!快来抢分!!!!!!!!!! mysql主从同步问题 请教:查询DB后相同类型的记录合并为一行显示且可展开。
会得到相同的结果
这一点你可以用 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 '<br>';
var_dump($array2);
echo '<br>';
print_r(getKey($array1));
echo '<br>';
print_r(getKey($array2));
echo '<br>'; $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 会使用全等比较 (===) 来严格检查键值的数据类型。