ホームページ > バックエンド開発 > PHPチュートリアル > 同じ関数への同じ入力が異なる結果を生成するのはなぜですか?

同じ関数への同じ入力が異なる結果を生成するのはなぜですか?

WBOY
リリース: 2016-06-23 14:28:22
オリジナル
1092 人が閲覧しました

php

助けてください、関数に配列を2回入力してください。2回入力された配列を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 )
配列 ( [0] => 0 [1] => aa [2] => 1 [3] => bb [4 ] => 2 [5] => cc )
配列 ( [0] => 0 [1] => 1 )
配列 ( [0] => 1 )

最初の 2 つは同じです、最後の 2 つは同じです 2 つは異なります。print_r を使用して 2 つの入力配列が同じように出力されるのではないかと思いますが、実際には内部に異なるものがあります。しかし、この違いはどうやって確認できるのでしょうか。それで、違いは何ですか?
ご理解いただき、お気軽にアドバイスをいただければ幸いです。よろしくお願いします。


ディスカッションに返信(解決策)

return $arrKey = array_keys($arr, 'aa',true);
ログイン後にコピー

同じ結果が得られます

array_keys には 0 と '0' の間に違いがあります
これは var_dump で確認できます

array_keys($arr, 'aa' )
は戻り値が aa である要素のキーです
値が 0 の場合、'aa' == 0 片側が数値なので、比較のために aa は 0 に変換され、式が成り立ちます
のときvalue は '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 => 文字列 'aa' (長さ = 2)
2 => int 1
3 => 文字列 'bb' (長さ = 2)
4 => 文字列 'cc ' (長さ=2)

配列
0 => 文字列 '0' (長さ=1)
1 => 文字列 'aa' (長さ=2)
2 => 文字列 '1' (長さ=1) )
3 => 文字列 'bb' (長さ=2)
4 => 文字列 '2' (長さ=1)

配列 ( [0] => 0 [1] => 1 )
配列 ( [0] => 1 )
配列 ( [0] => 0 [1] => 2 )
何か見えますか array_keys(array, value,strict) php は弱い言語です 数値 0 は特定の文字として扱われるため、strict を true として指定する必要があります
strict パラメーターを true に指定すると、PHP は合同比較 (===) を使用してデータを厳密にチェックしますキー値のタイプ。

microlab2009 と xuzuning の詳細な指導のおかげで、非常に明確になりました。
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート