最初に需要の背景を紹介します:
請求方法:
0=寄付 (理由は聞かないでください、歴史的な理由)
1=センターに送信します
2=リクエスト
3=電子請求書
今ユーザーによって送信されたデータがテストされます:
php;auto-links:false;">if(!in_array($_POST['invoice_action'], array(0,1,2,3))){ throw new Exception('请选择正确的发票方式'); }
この時点で、値 $_POST['invoice_action'] がまったく存在しない場合、なぜ例外がスローされないのでしょうか?
確認後、これが PHP の動作です 弱い型付け言語の落とし穴、そうです、これは落とし穴です このコードセットを見てください:echo in_array('', array(0)) ? 1 : 0; // 结果:1 echo in_array(null, array(0)) ? 1 : 0; // 结果:1 echo in_array(false, array(0)) ? 1 : 0; // 结果:1このような大きな落とし穴、どうやって回避したり埋めたりするのでしょうか。それは? 方法 1: in_array は 3 番目のパラメーターをサポートし、データ型検出を強制します
echo in_array('', array(0), true) ? 1 : 0; // 结果:0 echo in_array(null, array(0), true) ? 1 : 0; // 结果:0 echo in_array(false, array(0), true) ? 1 : 0; // 结果:0方法 2: データ型の方向で、配列内の 0 を文字列に変更します
echo in_array('', array('0'), true) ? 1 : 0; // 结果:0 echo in_array(null, array('0'), true) ? 1 : 0; // 结果:0 echo in_array(false, array('0'), true) ? 1 : 0; // 结果:0概要 上記は、PHP で in_array 関数を使用するときに発生する問題と解決策に関するものです。この記事が、同じ問題に遭遇した友人にとって役立つことを願っています。ご質問がある場合は、メッセージを残してください。