ホームページ > バックエンド開発 > PHPチュートリアル > 関数 in_array() の最初のパラメータは配列ですが、大丈夫ですか?

関数 in_array() の最初のパラメータは配列ですが、大丈夫ですか?

WBOY
リリース: 2016-06-23 14:24:12
オリジナル
1014 人が閲覧しました

<?    $x1=array(1=>111,2=>222,3=>333);    $x2=array(1=>777,2=>111,3=>222,4=>333)    $y=in_array($x1,$x2);           //第1个参数是数组。    echo $y;    echo "\r\n";?>
ログイン後にコピー



プログラムエラーが発生するのはなぜですか?


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

in_array の最初のパラメータは単一値のデータである必要があります

配列の場合は、array_intersect を使用して交差を取得する必要があります

in_array の最初のパラメータは単一である必要があります-valued data

配列の場合は、array_intersect を使用して交差を取得する必要があります

http://docs.php.net/manual/zh/function.in-array.php

更新ログ

バージョン 説明
PHP バージョン 4.2.0 4.2.0 より前では、needle を配列にすることはできませんでした。

PHP 公式中国語ドキュメント、それは何を意味しますか?

まあ、マニュアルをよく読んでください

は配列にすることができます。マニュアルの最後の例は次のとおりです。

in_array の最初のパラメータは単一値データである必要があります

配列の場合、array_intersect を使用して交差を取得する必要があります


<?    $x1=array(array("a","b"),"c");    $y1=in_array(array("a","b"),$x1);   //在二维数组中找。    echo $y1;    echo "\r\n";    $x2=array(array(array("1","2"),"b"),"c");    $y2=in_array(array("1","2"),$x2);   //在三维数组中找    echo $y2;    echo "\r\n";?>
ログイン後にコピー


1 次元配列では、検索は次の値を返します: 1
なぜ a なのか三次元配列、検索、戻り値: 0?

変更点:

2 次元配列では検索は 1 を返します。
3 次元配列では検索では 0 が返されるのはなぜですか?

変更:

2 次元配列では検索は 1 を返します。
3 次元配列では検索では 0 が返されるのはなぜですか?

echo in_array(array(array("1","2"),"b"),array(array(array("1","2"),"b"),"c"))?' true':'false';

in_array 関数を手書きすれば、その理由がわかるでしょう...

in_array の最初のパラメータは単一値のデータである必要があります

配列の場合、array_intersect は次のようになりますつまり、最初のパラメーターが配列の場合、交差


を取得するとき、
多次元配列の 1 つの次元 (つまり 2 番目のパラメーター) のみを見つけることができます。

比較は最初の次元でのみ実行されます
最初のパラメータの配列が構造体と一致する場合

$a = array(array("a","b"),"c");var_dump( in_array(array("a","b"), $a) ); //bool(true)var_dump( in_array(array("b","a"), $a) ); //bool(false)
ログイン後にコピー
ログイン後にコピー

したがって、このように使用しないことをお勧めします。値のデータのみを使用することがより適切です

比較は最初の次元でのみ実行されます
最初のパラメータが配列の場合、構造体も一緒に照合されます

$a = array(array("a","b"),"c");var_dump( in_array(array("a","b"), $a) ); //bool(true)var_dump( in_array(array("b","a"), $a) ); //bool(false)
ログイン後にコピー
ログイン後にコピー

したがって、このように使用しないことをお勧めします。あるいは、単に渡す方が適切です値のデータ

<?$x2=array(array(array("1","2"),"b"),"c");    $y2=in_array(array("1","2"),$x2);       //在三维数组中找    echo $y2;    echo "\r\n";?>
ログイン後にコピー


プログラムが見つからず、0 を返すのはなぜですか?

$x2 = array(
array(array("1","2"),"b"),
"c"
);
最初の次元は次のようになります
array("1", 「2」) もちろん見つからない

初心者には理解できない

特別な状況下では可能です。

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