解决方案 »

  1.   

    return $arrKey = array_keys($arr, 'aa',true);
    会得到相同的结果
      

  2.   

    array_keys 中 0 和 '0' 是有区别的
    这一点你可以用 var_dump 观察到array_keys($arr, 'aa')
    是返回值为 aa 的元素的键
    当值为 0 时, 'aa' == 0 因为一边是数值,所以 aa 会转换为 0 进行比较,表达式成立
    当值为 '0' 时, 'aa' == '0' 因为两边是字符串,无需转换,表达式不成立成立
      

  3.   

    <?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 会使用全等比较 (===) 来严格检查键值的数据类型。
      

  4.   

    感谢microlab2009和xuzuning的详细指导,这下很明白了。