【PHP8.x】array_keys関数の使い方

作成日: 更新日:

『array_keys関数は、配列に含まれる全てのキー、または指定した値に対応するキーを取得し、それらを要素とする新しい配列を返す関数です。この関数は、第一引数に与えられた配列からキーのみを抽出するために使用されます。第二引数に特定の値を指定すると、配列の中からその値を持つ要素を検索し、対応するキーだけを返します。これにより、ある値がどのキーに関連付けられているかを効率的に調べることが可能です。さらに、第三引数にブール値の true を指定すると、第二引数の値と配列の要素の値を、データ型まで完全に一致するかどうかを判定する厳密な比較を行います。この引数を省略、または false を指定した場合は、データ型を考慮しない緩やかな比較が行われます。返される値は常に、抽出されたキーを要素として持つ新しい配列であり、元の配列のキーが整数であれば整数、文字列であれば文字列として格納されます。この関数は、配列の構造を把握したり、特定の値を持つキーをまとめて取得したい場合に役立ちます。』

基本的な使い方

構文(syntax)

array_keys(array $array, mixed $search_value = null, bool $strict = false): array

引数(parameters)

array $array, mixed $filter_value = null, bool $strict = false

  • array $array: キーを取得したい配列
  • mixed $filter_value = null: 特定の値を持つ要素のキーのみを取得する場合に、その値。指定しない場合は全てのキーを取得
  • bool $strict = false: $filter_value との比較を厳密に行うかどうかの真偽値

戻り値(return)

list<int|string>

指定された配列からキーのみを抽出した新しい配列を返します。キーは数値または文字列のいずれかです。

サンプルコード

PHP多次元配列のキーを抽出する

<?php

/**
 * 多次元配列から特定のキーを抽出するサンプル
 */
function extractKeysFromMultidimensionalArray(array $array, mixed $filter_value = null, bool $strict = false): array
{
    $result = [];

    foreach ($array as $key => $value) {
        // フィルタ値が指定されている場合、値を比較
        if ($filter_value !== null) {
            if ($strict) {
                if ($value === $filter_value) {
                    $result[] = $key;
                }
            } else {
                if ($value == $filter_value) {
                    $result[] = $key;
                }
            }
        } else {
            $result[] = $key;
        }

        // 値が配列の場合、再帰的に処理
        if (is_array($value)) {
            $nestedKeys = extractKeysFromMultidimensionalArray($value, $filter_value, $strict);
            $result = array_merge($result, $nestedKeys);
        }
    }

    return $result;
}

// サンプルデータ
$multidimensionalArray = [
    'name' => 'John Doe',
    'age' => 30,
    'address' => [
        'street' => '123 Main St',
        'city' => 'Anytown',
        'zip' => '12345',
    ],
    'hobbies' => ['reading', 'hiking', 'coding'],
    'status' => true
];

// 全てのキーを取得
$allKeys = extractKeysFromMultidimensionalArray($multidimensionalArray);
echo "全てのキー:\n";
print_r($allKeys);

// 'reading'という値を持つキーを取得 (厳密な比較なし)
$filteredKeys = extractKeysFromMultidimensionalArray($multidimensionalArray, 'reading');
echo "\n値が'reading'のキー:\n";
print_r($filteredKeys);

// 'true'という値を持つキーを取得 (厳密な比較)
$filteredStrictKeys = extractKeysFromMultidimensionalArray($multidimensionalArray, true, true);
echo "\n値が'true'のキー (厳密な比較):\n";
print_r($filteredStrictKeys);

PHPのarray_keys関数は、配列からキーを取得するために使用します。このサンプルコードでは、多次元配列から特定のキーを抽出するextractKeysFromMultidimensionalArray関数を実装し、array_keysの応用例を示しています。

extractKeysFromMultidimensionalArray関数は、引数として配列 $array、フィルタ値 $filter_value(オプション)、厳密な比較を行うかどうかを示す $strict(オプション)を受け取ります。この関数は、配列を再帰的に処理し、指定されたフィルタ値に基づいてキーを抽出します。

$filter_valueが指定された場合、配列の値がこの値と一致するキーのみが結果に追加されます。$stricttrueの場合、値の比較は厳密に行われ(===を使用)、型まで一致する必要があります。$strictfalseの場合、通常の比較演算子(==)が使用されます。

サンプルコードでは、まずサンプルとなる多次元配列 $multidimensionalArray を定義しています。次に、extractKeysFromMultidimensionalArray関数を使用して、配列の全てのキー、値が'reading'であるキー、そして値がtrueであるキー(厳密な比較)をそれぞれ取得し、結果を出力しています。

このサンプルは、array_keys関数が直接多次元配列を扱えないため、再帰的な関数を使って多次元配列に対応する方法を示しています。array_keys単体では実現できない、より複雑な条件でのキー抽出を可能にするテクニックです。この例を通じて、配列操作におけるarray_keysの応用範囲を理解することができます。

array_keys関数は、指定した配列のキーを返しますが、多次元配列には直接対応していません。サンプルコードは、再帰関数を用いて多次元配列に対応しています。

$filter_valueを指定すると、その値と一致する値に対応するキーのみが抽出されます。$stricttrueに設定すると、型の厳密な比較(===)が行われます。falseの場合は、型の緩やかな比較(==)が行われるため、意図しない結果になる可能性があることに注意してください。

多次元配列を扱う場合、再帰処理の深さに注意が必要です。配列の構造によっては、処理が重くなる可能性があります。また、array_mergeを使用しているため、大規模な配列ではメモリ消費量が増加する可能性があります。状況に応じて、より効率的な実装を検討してください。

【PHP8.x】array_keys関数の使い方 | いっしー@Webエンジニア