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));
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'));?>