首頁 >後端開發 >php教程 >为什么同样的输入给同样的函数,出来结果不一样?

为什么同样的输入给同样的函数,出来结果不一样?

WBOY
WBOY原創
2016-06-23 14:28:221085瀏覽

php

大家帮忙看一下,两次分别给函数输入数组,两次输入的数组用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 '<br>';print_r($array2);echo '<br>';print_r(getKey($array1));echo '<br>';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' 因为两边是字符串,无需转换,表达式不成立成立

<?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的详细指导,这下很明白了。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn