こんにちは!ドイです。 PHP の配列操作の関数を勉強しよう、第二回目です。
↓前回の記事
前回同様、こちらを参考に勉強していきます。
- array_flip
- array_intersect_assoc
- array_intersect_key
- array_intersect_uassoc
- array_intersect_ukey
- array_intersect
- array_is_list
- array_key_exists
- array_key_first
- array_key_last
- まとめ
array_flip
配列のキーとバリューを反転して返します。
<?php $fruits = array('a' => "apple",'b' => "banana", 'c' => "cherry"); $fruit = array_flip($fruits); echo $fruit;
<?php array:3 [ "apple" => "a" "banana" => "b" "cherry" => "c" ]
array_intersect_assoc
比較する配列のうち、共通する値を返します。
<?php $array1 = array(0 => "first", "b" => "business", 2 => "hotel", "japan"); $array2 = array(0 => "first", "b" => "study", "Friend's house", "japan"); $result_array = array_intersect_assoc($array1, $array2); echo $result_array;
<?php array:1 [ 0 => "first" ]
例えば、DBから値を取得して、共通する項目を持つユーザーを探す場合に使えるのかもしれません。
上記では、"japan"が共通の値として存在しますが、キーが異なるため出力はされません。
array_intersect_key
比較する配列のうち、存在するキーを連想配列にして返します。
<?php $array1 = array('adult' => 1, 'child' => 2, 'cat' => 2,); $array2 = array('adult' => 2, 'baby' => 1, 'dog' => 1,'cat' => 1,); echo array_intersect_key($array1, $array2);
<?php array:2 [ "adult" => 1 "cat" => 2 ]
キーを基準にしているので、値が異なる場合でも連想配列の形で返します。
array_intersect_uassoc
比較する配列に存在する値を、コールバック関数を用いて返します。こちらはキーを含めて比較されます。
<?php $array1 = array("adult" => 2, "baby" => 1, "child" => 3); $array2 = array("adult" => 2, "bee" => 3, "cat" => 1); $result = array_intersect_uassoc($array1, $array2, function ($array1, $array2) { if ($array1 > $array2) { return 1; } elseif ($array1 === $array2) { return 0; } else { return -1; } }); echo $result;
<?php array:1 [ "adult" => 2 ]
array_intersect_ukey
キーを基準に、コールバック関数を利用して共通の項目を計算します。
<?php $array1 = array("adult" => 2, "bee" => 3, "cat" => 1); $array2 = array("adult" => 2, "baby" => 1, "child" => 3); $result = array_intersect_ukey($array1, $array2, function ($a, $b) { if ($a == $b) { return 0; } elseif ($a > $b) { return 1; } else { return -1; } }); echo $result;
<?php array:1 [ "adult" => 2 ]
array_intersect
共通する値を返します。キーと値は維持されます。
<?php $color1 = array("a" => "red","b" => "pink", "c" => "pink",); $color2 = array("a" => "red","b" => "pink","c" => "green", "d" => "blue", ); $result = array_intersect($color1, $color2); echo $result;
<?php array:3 [ "a" => "red" "b" => "pink" "c" => "pink" ]
共通する値を返す関数が続きましたね。
それぞれの特性を認識して、うまく使っていきたいですね。
array_is_list
配列がリストかどうかを判定します。
こちら(PHP 8 >= 8.1.0)とあるので、バージョンが古いと動作を確認できません。
<?php echo array_is_list([]); // true echo array_is_list([0 => 1, 1 => 2, 2 => 3]); // true echo array_is_list([1 => 1, 2 => 2, 3 => 3]); // false echo array_is_list([1 => 1, 2 => 2, 4 => 3]); // false
空の配列についてもtrueを返すので、注意です。
array_key_exists
指定されたキーが存在する場合に、trueを返します。
<?php $array = array("tea" => 2,"bicycle" => 1, 'tennis' => 4); echo array_key_exists('tea', $array); // true
array_key_first
配列の最初のキーを取得します。
<?php $array = ['apple' => 1, 'banana' => 2, 'chery' => 3]; $firstKey = array_key_first($array); echo $firstKey; // "apple"
array_key_last
先ほどの関数とは反対に、一番最後のキーを取得します。
<?php $array = ['apple' => 1, 'banana' => 2, 'cherry' => 3]; $firstKey = array_key_last($array); echo $firstKey; // "cherry"
まとめ
共通の値を返す関数が多かったように思います。
案件によっては、共通項を探して「この値があった場合」と分岐する処理が必要になってくるかと思います。
それぞれの案件や仕様に合わせて、適切な関数を使い分けていけたらと思います。