PHPのarray_keys関数の使い方!配列のキーのみ取得する

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引数 $stricttrue を指定して、型まで含めて厳密に比較してみましょう。

<?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` で型比較の厳密さを制御できます。
PHP

コメント