PHP配列交差の問題

WBOY
リリース: 2016-06-23 14:01:43
オリジナル
1120 人が閲覧しました

PHPの配列関数の交差

マニュアルを見てこれらのメソッドが載っていたのですが、よく分かりませんでした。専門家が説明してくれますか?

array_intersect(array1, array2) // 値を比較し、交差を取得します
array_intersect_assoc() それら 2 つはあまり明確ではありません
array_intersect_uassoc(array1,array2,array3...,function) )
array_intersect_ukey(array1,array2,array3...,function)

function の戻り値は影響しますか?

実際に実践されている例を使って説明するのがベストです。


ディスカッションへの返信(解決策)
関数パラメータは、array1、array2、array3、その他の配列の値またはキー値がこの関数を実行するメソッドを表します

function  key_compare_func ( $key1 ,  $key2 ){    if ( $key1  ==  $key2 )        return  0 ;    else if ( $key1  >  $key2 )        return  1 ;    else        return - 1 ;} $array1  = array( 'blue'   =>  1 ,  'red'   =>  2 ,  'green'   =>  3 ,  'purple'  =>  4 ); $array2  = array( 'green'  =>  5 ,  'blue'  =>  6 ,  'yellow'  =>  7 ,  'cyan'    =>  8 ); var_dump ( array_intersect_ukey ( $array1 ,  $array2 ,  'key_compare_func' ));
ログイン後にコピー

出力結果:

array( 2) {
[" blue"]=>
int(1)
["green"]=>
int(3)
}
これらの例は PHP マニュアルで参照できます
2 つの交差を見つけるには配列の場合、array_intersect()、array_inersect_assoc、array_intersect_key を使用して実装できます。array_intersect() 関数は 2 つの数値の交差部分を見つけるための関数です

<?PHP $array = array("red"=>"Red","green"=>"red4","Red15"=>"Red",7=>"Level","Width"=>"Red","azzzz1"=>"art","peak"=>158); $array1 = array("red"=>"Red2","greena"=>"red","Red15"=>"Red",7=>"Level","Width"=>"Red","azzzz"=>"art","peak"=>158); $num = array_intersect($array,$array1); print_r ($num); echo ""; $num = array_intersect_assoc($array,$array1); print_r($num); echo ""; $num = array_intersect_key($array,$array1); print_r ($num); ?>
ログイン後にコピー

詳細については、http://web10000.cn/thread-126 を参照してください。 -1-1.html
お役に立てば幸いです

例として #1 のコードを取り上げます

function  key_compare_func ( $key1 ,  $key2 ) {    if ( $key1  ==  $key2 )        return  0 ;    else if ( $key1  >  $key2 )        return  1 ;    else        return - 1 ;} $array1  = array( 'blue'   =>  1 ,  'red'   =>  2 ,  'green'   =>  3 ,  'purple'  =>  4 );$array2  = array( 'green'  =>  5 ,  'blue'  =>  6 ,  'yellow'  =>  7 ,  'cyan'    =>  8 );print_r( array_intersect_key ( $array1 ,  $array2 ));print_r( array_intersect_ukey ( $array1 ,  $array2 ,  'key_compare_func' ));
ログイン後にコピー
ログイン後にコピー
got
Array(    [blue] => 1    [green] => 3)Array(    [blue] => 1    [green] => 3)
ログイン後にコピー
ログイン後にコピー

array_intersect_key が内部で key_compare_func と同等の関数を使用していることがわかります
array_intersect_ukey はコールバック関数を通じてデフォルトの動作を変更できます
function  key_compare_func ( $key1 ,  $key2 ) {    if ( strtolower($key1)  ==  strtolower($key2) )        return  0 ;    else if ( $key1 > $key2 )        return  1 ;    else        return - 1 ;} $array1  = array( 'Blue'   =>  1 ,  'red'   =>  2 ,  'green'   =>  3 ,  'purple'  =>  4 );$array2  = array( 'green'  =>  5 ,  'blue'  =>  6 ,  'yellow'  =>  7 ,  'cyan'    =>  8 );print_r( array_intersect_key ( $array1 ,  $array2 ));print_r( array_intersect_ukey ( $array1 ,  $array2 ,  'key_compare_func' ));
ログイン後にコピー
ログイン後にコピー
Array(    [green] => 3)Array(    [Blue] => 1    [green] => 3
ログイン後にコピー
ログイン後にコピー
比較では大文字と小文字が区別されなくなっていることがわかります

#1 のコードを例に取ると、

function  key_compare_func ( $key1 ,  $key2 ) {    if ( $key1  ==  $key2 )        return  0 ;    else if ( $key1  >  $key2 )        return  1 ;    else        return - 1 ;} $array1  = array( 'blue'   =>  1 ,  'red'   =>  2 ,  'green'   =>  3 ,  'purple'  =>  4 );$array2  = array( 'green'  =>  5 ,  'blue'  =>  6 ,  'yellow'  =>  7 ,  'cyan'    =>  8 );print_r( array_intersect_key ( $array1 ,  $array2 ));print_r( array_intersect_ukey ( $array1 ,  $array2 ,  'key_compare_func' ));
ログイン後にコピー
ログイン後にコピー
got
Array(    [blue] => 1    [green] => 3)Array(    [blue] => 1    [green] => 3)
ログイン後にコピー
ログイン後にコピー

array_intersect_key が内部で key_compare_func と同等の関数を使用していることがわかります
array_intersect_ukey は、コールバック関数
function  key_compare_func ( $key1 ,  $key2 ) {    if ( strtolower($key1)  ==  strtolower($key2) )        return  0 ;    else if ( $key1 > $key2 )        return  1 ;    else        return - 1 ;} $array1  = array( 'Blue'   =>  1 ,  'red'   =>  2 ,  'green'   =>  3 ,  'purple'  =>  4 );$array2  = array( 'green'  =>  5 ,  'blue'  =>  6 ,  'yellow'  =>  7 ,  'cyan'    =>  8 );print_r( array_intersect_key ( $array1 ,  $array2 ));print_r( array_intersect_ukey ( $array1 ,  $array2 ,  'key_compare_func' ));
ログイン後にコピー
ログイン後にコピー
Array(    [green] => 3)Array(    [Blue] => 1    [green] => 3
ログイン後にコピー
ログイン後にコピー
を見ると、比較で大文字と小文字が区別されなくなっていることがわかります

array_intersect_ukey わかりました。
array_intersect_uassoc 関数については、マニュアルには次のように記載されています。「array_intersect_assoc() とは異なり、キー値の比較に加えて、キー名も比較する必要があることに注意してください。マニュアルに示されている例では、この関数は値を比較するだけです。」キーの比較については言及されていません。

rree rree、見えますか?

rree rree、見えますか?

関数のパラメータが「キー」であるか「値」であるかを区別するにはどうすればよいですか?

区別する必要はありません

array_intersect_uassoc はコールバック関数を使用してキーを識別することです

値とキーを自分で決定したい場合は、array_uintersect_uassoc 関数を使用する必要があります

そして 2 つのコールバック関数を渡す必要があります

区別する必要はありません
array_intersect_uassoc はコールバック関数を使ってキーを特定することです

自分で値やキーを決めたい場合は、array_uintersect_uassoc 関数を使って

コールバック関数を 2 つ渡す必要があります

ああ、わかりました。 ありがとう!

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