【PHP】第二回 配列操作の関数を勉強しよう

こんにちは!ドイです。 PHP の配列操作の関数を勉強しよう、第二回目です。

↓前回の記事

tech.arms-soft.co.jp

前回同様、こちらを参考に勉強していきます。

PHP: 配列 - Manual

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"

まとめ

共通の値を返す関数が多かったように思います。
案件によっては、共通項を探して「この値があった場合」と分岐する処理が必要になってくるかと思います。
それぞれの案件や仕様に合わせて、適切な関数を使い分けていけたらと思います。