SYNCERのロゴ
アイキャッチ画像

array_uintersect_uassoc - ユーザー定義のアルゴリズムで、複数の配列の中から共通の要素を確認する

array_uintersect_uassocは、複数の配列の中から、全ての配列に含まれる共通の要素(キー名と値の組み合わせ)を見つける関数です。ユーザー定義のアルゴリズムを使って比較できます。

構文

array array_uintersect_uassoc ( array $array1 , array $array2 [, array $... ], callable $value_compare_func , callable $key_compare_func )

パラメータ

$array1

基本の配列。

$array2

比較対象となる配列。

$...

比較対象となる配列は1つだけじゃなく、第3引数以降で指定できる。

$value_compare_func

int callback ( mixed $a, mixed $b )

「値」の差異を判定するための比較関数を最後の引数として指定する。このコールバック関数は比較対象の2つの値を受け取る。関数が0を返した時に同じ、正の数を返した時に第1引数の方が大きい、負の数を返した時に第1引数の方が小さい、と判定される。

$key_compare_func

int callback ( mixed $a, mixed $b )

「キー」の差異を判定するための比較関数を最後の引数として指定する。このコールバック関数は比較対象の2つの値を受け取る。関数が0を返した時に同じ、正の数を返した時に第1引数の方が大きい、負の数を返した時に第1引数の方が小さい、と判定される。

返り値

array

全ての配列に含まれる共通の要素(キー名と値の組み合わせ)を集めた配列。

サンプルコード

PHP

<?php
	$array1 = [
		"a" => 1 ,
		"b" => 2 ,
		"c" => 3 ,
		"d" => 4 ,
	] ;

	$array2 = [
		"a" => 1 ,
		"b" => 2 ,
		"c" => 5 ,
		"e" => 4 ,
	] ;

	function value_compare_func( $a, $b ) {
		// 3と5を同じ扱いにする
		if ( $a == 3 ) $a = 5 ;
		if ( $b == 3 ) $b = 5 ;

		// 他は自然な処理
		if ( $a == $b ) {
			return 0 ;
		} else {
			return $a > $b ? 1 : -1 ;
		}
	}

	function key_compare_func( $a, $b ) {
		// "d"と"e"を同じ扱いにする
		if ( $a == "d" ) $a = "e" ;
		if ( $b == "d" ) $b = "e" ;

		// 他は自然な処理
		if ( $a == $b ) {
			return 0 ;
		} else {
			return $a > $b ? 1 : -1 ;
		}
	}

	$response = array_uintersect_uassoc( $array1, $array2, "value_compare_func", "key_compare_func" ) ;

デモ

値の35、キーの"d""e"を同じ値扱いとして、処理します。本来、"c"=>3"c"=>5"d"=>4"e"=>4は違う要素なのに、結果に含まれます。

<?php
/*** このコードは編集できます。 ***/

	$array1 = [
		"a" => 1 ,
		"b" => 2 ,
		"c" => 3 ,
		"d" => 4 ,
	] ;

	$array2 = [
		"a" => 1 ,
		"b" => 2 ,
		"c" => 5 ,
		"e" => 4 ,
	] ;

	function value_compare_func( $a, $b ) {
		// 3と5を同じ扱いにする
		if ( $a == 3 ) $a = 5 ;
		if ( $b == 3 ) $b = 5 ;

		// 他は自然な処理
		if ( $a == $b ) {
			return 0 ;
		} else {
			return $a > $b ? 1 : -1 ;
		}
	}

	function key_compare_func( $a, $b ) {
		// "d"と"e"を同じ扱いにする
		if ( $a == "d" ) $a = "e" ;
		if ( $b == "d" ) $b = "e" ;

		// 他は自然な処理
		if ( $a == $b ) {
			return 0 ;
		} else {
			return $a > $b ? 1 : -1 ;
		}
	}

	$response = array_uintersect_uassoc( $array1, $array2, "value_compare_func", "key_compare_func" ) ;

	print_r( $response ) ;
Array
(
    [a] => 1
    [b] => 2
    [c] => 3
    [d] => 4
)
  • Twitterでシェア
  • Facebookでシェア
  • Google+でシェア
  • はてなブックマークでシェア
  • pocketに保存
  • LINEでシェア
更新履歴
2017年6月26日 (月)
コンテンツを公開しました。