PHP で in_array 関数を使用する場合の問題と解決策

高洛峰
リリース: 2023-03-03 21:58:02
オリジナル
1140 人が閲覧しました

最初に需要の背景を紹介します:

請求方法:

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 関数を使用するときに発生する問題と解決策に関するものです。この記事が、同じ問題に遭遇した友人にとって役立つことを願っています。ご質問がある場合は、メッセージを残してください。


PHP で in_array 関数を使用する際の問題と解決策に関するその他の関連記事については、PHP 中国語 Web サイトに注目してください。


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