為什麼同樣的輸入給同樣的函數,出來結果不一樣?

來源:互聯網
上載者:User
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 '
';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' 因為兩邊是字串,無需轉換,運算式不成立成立

'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 會使用全等比較 (===) 來嚴格檢查索引值的資料類型。

感謝microlab2009和xuzuning的詳細指導,這下很明白了。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.