PHPのarray_keys
関数について書いています。
array_keys
関数は配列に含まれる値ではなく、キーだけを一覧で取得したいというときに使用できます。
例えば、設定データを連想配列で持っていて、どんな設定項目(キー)があるかを知りたい時や、データベースから取得したデータのカラム名(キー)だけを取り出したい時などです。
このような場合に非常に便利なのが、PHPの標準関数 array_keys
関数です。
array_keys関数とは?
array_keys
関数は、指定した配列に含まれるすべてのキーまたは特定の値を持つキーを取得し、それらを要素とする新しい配列を返す関数です。
基本的な構文
array array_keys ( array $array ): array
または
array array_keys ( array $array , mixed $searchValue [, bool $strict = false ] ): array
引数
$array
: キーを取得したい対象の配列を指定します。
※2番目の引数以降は後述しています。
返り値
- 指定した配列
$array
のすべてのキーを要素として持つ、新しい配列を返します。 - 返される配列のキーは、0から始まる数値インデックスになります。
- 元の配列が空の場合、空の配列を返します。
この基本的な形式は、PHP4以降で利用可能ですので、ほとんどの環境で心配なく使えます。
array_keys関数の基本的な使い方
まずは、配列のすべてのキーを取得する基本的な使い方を確認します。
例1:連想配列の場合
連想配列を渡して、すべてのキーを取得します。
<?php
// ユーザー情報を格納した連想配列を定義します。
$userProfile = [
'id' => 101,
'name' => 'Yamada Taro',
'email' => 'yamada@example.com',
'age' => 30
];
// array_keys関数で、$userProfile配列のすべてのキーを取得します。
$keys = array_keys($userProfile);
// 取得したキーの配列を出力します。
echo "取得したキー:\n";
print_r($keys);
?>
まず。$userProfile
という連想配列を定義しています。
次に、array_keys
関数に$userProfile
配列を渡して、そのすべてのキー(’id’, ‘name’, ‘email’, ‘age’)を取得します。
新しい配列として結果が得られるので、変数$keys
に代入しています。
print_r
で$keys
の内容を出力すると、元の配列のキーが順番に格納された、新しい数値インデックスの配列が得られていることがわかります。
実行結果
取得したキー:
Array
(
[0] => id
[1] => name
[2] => email
[3] => age
)
例2:数値添字の配列の場合
数値添字の配列に対しても array_keys
関数を使うことができます。
その場合、0から始まる数値のキーが取得されます。
<?php
// 色の名前を格納した数値添字の配列を定義します。
// キーは自動的に 0, 1, 2 となります。
$colors = [
'Red', // キー 0
'Green', // キー 1
'Blue' // キー 2
];
// array_keys関数で、$colors配列のすべてのキーを取得します。
$numericKeys = array_keys($colors);
// 取得したキーの配列を出力します。
echo "取得した数値キー:\n";
print_r($numericKeys);
?>
$colors
配列のキーは 0
, 1
, 2
です。
array_keys
関数は、これらの数値を要素として持つ新しい配列$numericKeys
を返します。
実行結果
取得した数値キー:
Array
(
[0] => 0
[1] => 1
[2] => 2
)
例3:空の配列の場合
空の配列をarray_keys
関数に渡すと、空の配列が返されます。
<?php
// 空の配列を定義します。
$emptyArray = [];
// array_keys関数で、空の配列のキーを取得します。
$emptyKeys = array_keys($emptyArray);
// 取得した結果を出力します。
echo "空の配列から取得したキー:\n";
print_r($emptyKeys);
?>
空の配列にはキーが存在しないため、結果も空の配列となります。
実行結果
空の配列から取得したキー:
Array
(
)
特定の値を持つキーのみを取得する
array_keys
関数は、第2引数を指定することで、配列の中から 特定の値を持つ要素のキーだけ を検索して取得することもできます。
構文
array array_keys ( array $array , mixed $searchValue [, bool $strict = false ] ): array
追加の引数
$searchValue
: 検索したい値を指定します。この値を持つ要素のキーだけが返されます。$strict
(オプション):true
を指定すると、型の比較も厳密に行います(===
と同じ)。デフォルトはfalse
で、緩やかな比較(==
と同じ)を行います。
例1:特定の値を持つキーを検索 (緩やかな比較)
特定の値を持つキーのみに限定して取得します。
<?php
// 商品の在庫状況を格納した配列を定義します。
// 在庫数が数値の場合と文字列の場合が混在しています。
$inventory = [
'apple' => 50,
'orange' => '0', // 文字列の '0'
'banana' => 100,
'grape' => 0, // 数値の 0
'melon' => 50
];
// 値が 50 である要素のキーを検索します (緩やかな比較: $strict = false)。
$keysWithValue50 = array_keys($inventory, 50);
echo "値が 50 のキー:\n";
print_r($keysWithValue50);
// 値が 0 である要素のキーを検索します (緩やかな比較)。
// 文字列の '0' も数値の 0 と等しいとみなされます。
$keysWithValue0 = array_keys($inventory, 0);
echo "\n値が 0 のキー (緩やか):\n";
print_r($keysWithValue0);
?>
$inventory
配列から特定の値を持つキーを探しています。
最初の「array_keys($inventory, 50)
」では、値が50
(数値)であるキー'apple'
と'melon'
が取得されます。
次の「array_keys($inventory, 0)
」では、第3引数 $strict
を指定していない(デフォルトの false
)ため、緩やかな比較が行われます。
これにより、値が文字列の'0'
である'orange'
と、数値の0
である'grape'
の両方のキーが取得されています。
実行結果
値が 50 のキー:
Array
(
[0] => apple
[1] => melon
)
値が 0 のキー (緩やか):
Array
(
[0] => orange
[1] => grape
)
例2:特定の値を持つキーを検索 (厳密な比較)
第3引数 $strict
に true
を指定して、型まで含めて厳密に比較してみましょう。
<?php
$inventory = [
'apple' => 50,
'orange' => '0', // 文字列の '0'
'banana' => 100,
'grape' => 0, // 数値の 0
'melon' => 50
];
// 値が数値の 0 である要素のキーを厳密に検索します ($strict = true)。
$keysWithValueNumeric0 = array_keys($inventory, 0, true);
echo "値が数値 0 のキー (厳密):\n";
print_r($keysWithValueNumeric0);
// 値が文字列の '0' である要素のキーを厳密に検索します ($strict = true)。
$keysWithValueString0 = array_keys($inventory, '0', true);
echo "\n値が文字列 '0' のキー (厳密):\n";
print_r($keysWithValueString0);
?>
「array_keys($inventory, 0, true)
」では、厳密な比較 (===
) が行われます。
そうすると、値が数値の0
である'grape'
のキーのみが取得されます。
文字列の'0'
を持つ'orange'
は含まれません。
同様に「array_keys($inventory, '0', true)
」では、値が文字列の'0'
である'orange'
のキーのみが取得されます。
このように $strict
パラメータを使うことで、型を区別してキーを検索することができます。
実行結果
値が数値 0 のキー (厳密):
Array
(
[0] => grape
)
値が文字列 '0' のキー (厳密):
Array
(
[0] => orange
)
まとめ
PHPのarray_keys
関数は、配列からキーを取り出すための非常に便利な関数です。
連想配列のキー一覧が必要な場合や、特定の条件に合致するデータのキーを探したい場合など、様々な場面で活躍します。
・第2引数で特定の値を持つキーだけを検索できます。
・第3引数 `strict` で型比較の厳密さを制御できます。
コメント