同じ関数への同じ入力が異なる結果を生成するのはなぜですか?
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 の詳細な指導のおかげで、非常に明確になりました。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。
