【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
が指定された場合、配列の値がこの値と一致するキーのみが結果に追加されます。$strict
がtrue
の場合、値の比較は厳密に行われ(===
を使用)、型まで一致する必要があります。$strict
がfalse
の場合、通常の比較演算子(==
)が使用されます。
サンプルコードでは、まずサンプルとなる多次元配列 $multidimensionalArray
を定義しています。次に、extractKeysFromMultidimensionalArray
関数を使用して、配列の全てのキー、値が'reading'
であるキー、そして値がtrue
であるキー(厳密な比較)をそれぞれ取得し、結果を出力しています。
このサンプルは、array_keys
関数が直接多次元配列を扱えないため、再帰的な関数を使って多次元配列に対応する方法を示しています。array_keys
単体では実現できない、より複雑な条件でのキー抽出を可能にするテクニックです。この例を通じて、配列操作におけるarray_keys
の応用範囲を理解することができます。
array_keys
関数は、指定した配列のキーを返しますが、多次元配列には直接対応していません。サンプルコードは、再帰関数を用いて多次元配列に対応しています。
$filter_value
を指定すると、その値と一致する値に対応するキーのみが抽出されます。$strict
をtrue
に設定すると、型の厳密な比較(===
)が行われます。false
の場合は、型の緩やかな比較(==
)が行われるため、意図しない結果になる可能性があることに注意してください。
多次元配列を扱う場合、再帰処理の深さに注意が必要です。配列の構造によっては、処理が重くなる可能性があります。また、array_merge
を使用しているため、大規模な配列ではメモリ消費量が増加する可能性があります。状況に応じて、より効率的な実装を検討してください。