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

array_intersect_ukey - ユーザー定義のアルゴリズムで、複数の配列の中の共通のキー名を確認する

array_intersect_ukeyは、複数の配列の中から共通のキーを見つける関数です。判定を、ユーザーが定義したアルゴリズムで行ないます。

構文

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

パラメータ

$array1

基本の配列。

$array2

比較対象となる配列。

$...

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

$key_compare_func

int callback ( mixed $a, mixed $b )

差異を判定するための比較関数を最後の引数として指定する。このコールバック関数は比較対象の2つの値を受け取る。関数が0を返した時に同じ、0以外を返した時に違う、と判定される。

返り値

array

第1引数の配列にはあって、第2引数以降に指定した配列にはないキーの要素を集めた配列。

サンプルコード

<?php
	$array1 = [
		"a" => "red",
		"b" => "green",
		"c" => "purple",
	] ;

	$array2 = [
		"d" => "red",
		"b" => "green",
		"f" => "purple",
	] ;

	function key_compare_func( $a, $b ) {
		return 0 ;
	}

	$response = array_intersect_ukey( $array1, $array2, "key_compare_func" ) ;

デモ

コールバック関数には、"a""d""a""e"、といったように比較対象の2つのキーが渡され、結果を出すのに必要なだけ、関数が実行されます。関数が0を返すと、2つのキーは同じだと判定されます。物は試しに、必ず0を返す関数を指定してみます。すると、結果は全て同じキーだと判定されます。

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

	$array1 = [
		"a" => "red",
		"b" => "green",
		"c" => "purple",
	] ;

	$array2 = [
		"d" => "red",
		"b" => "green",
		"f" => "purple",
	] ;

	function key_compare_func( $a, $b ) {
		return 0 ;
	}

	$response = array_intersect_ukey( $array1, $array2, "key_compare_func" ) ;

	var_dump( $response ) ;
array(3) {
  ["a"]=>
  string(3) "red"
  ["b"]=>
  string(5) "green"
  ["c"]=>
  string(6) "purple"
}

今度は必ず0以外を返してみます。すると、全てのキーは同じじゃない、と判定されます。

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

	$array1 = [
		"a" => "red",
		"b" => "green",
		"c" => "purple",
	] ;

	$array2 = [
		"d" => "red",
		"b" => "green",
		"f" => "purple",
	] ;

	function key_compare_func( $a, $b ) {
		return 1 ;
	}

	$response = array_intersect_ukey( $array1, $array2, "key_compare_func" ) ;

	var_dump( $response ) ;
array(0) {
}

"a""d"を同じものだと判定する関数にしてみましょう。すると、"a""d"は違うキーなのに、同じキーだと判定されて結果に含まれます。このように、独自のルールで差異を判定したい時に便利です。

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

	$array1 = [
		"a" => "red",
		"b" => "green",
		"c" => "purple",
	] ;

	$array2 = [
		"d" => "red",
		"b" => "green",
		"f" => "purple",
	] ;

	function key_compare_func( $a, $b ) {
		// "a"は"d"と同じ扱い
		if( $a == "a" ) $a = "d" ;
		if( $b == "a" ) $b = "d" ;

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

	$response = array_intersect_ukey( $array1, $array2, "key_compare_func" ) ;

	var_dump( $response ) ;
array(2) {
  ["a"]=>
  string(3) "red"
  ["b"]=>
  string(5) "green"
}
  • Twitterでシェア
  • Facebookでシェア
  • Google+でシェア
  • はてなブックマークでシェア
  • pocketに保存
  • LINEでシェア
更新履歴
2017年6月21日 (水)
コンテンツを公開しました。