記事内にはプロモーションが含まれています

【PHP】連想配列のキーを取得する方法!array_keysやforeachの使い方を徹底解説

【PHP】連想配列のキーを取得する方法!array_keysやforeachの使い方を徹底解説 PHP

PHPでWeb開発を行っていると、データベースの検索結果やAPIのレスポンスなど、複雑な「連想配列」を扱う場面が毎日のようにあります。

その中で、「値(Value)ではなくキー(Key)の方を取り出したい」「特定の条件に合うキーだけを知りたい」というニーズは非常に多いものです。

しかし、PHPには配列操作の関数が山のようにあり、どれを使えば最適なのか迷ってしまうことも少なくありません。

「すべてのキーを一覧で欲しいのか」「ループの中でキーを使いたいのか」、あるいは「値からキーを逆引きしたいのか」によって、選ぶべき方法は異なります。

この記事では、PHPにおける連想配列のキー取得テクニックについて、基本の関数から応用的な検索方法、そしてPHP 7.3以降で導入された便利な関数まで、サンプルコード付きで詳しく解説します。

【本記事の信頼性】
プロフィール
執筆者:マヒロ
  • 執筆者は元エンジニア
  • SES⇒大手の社内SE⇒独立
  • 現在はこじんまりとしたプログラミングスクールを運営
  • モットーは「利他の精神」

全てのキーを配列として取得する array_keys

連想配列に含まれる「すべてのキー」をまとめて取り出したい場合は、標準関数の array_keys を使用するのが最も簡単で一般的です。

取得したキーは、新しい「インデックス配列(通常の配列)」として返されます。

array_keys の基本的な使い方

引数に対象の連想配列を渡すだけで、キーの一覧を取得できます。

<?php
// 連想配列の定義
$userData = [
    'name'   => '田中 太郎',
    'age'    => 28,
    'gender' => 'male',
    'city'   => 'Tokyo'
];

// すべてのキーを取得
$keys = array_keys($userData);

// 結果を表示
print_r($keys);
?>

実行結果

Array
(
    [0] => name
    [1] => age
    [2] => gender
    [3] => city
)

array_keys($userData) を実行すると、元の連想配列のキー部分(’name’, ‘age’ …)だけが抽出され、$keys という新しい配列に格納されます。

CSVの見出し行を作ったり、特定のパラメータが揃っているかチェックしたりする際に非常に便利です。

特定の値を持つキーだけを取得する(第2引数)

実は array_keys は第2引数に「検索したい値」を指定することで、その値を持つキーだけをフィルタリングして取得することも可能です。

<?php
$scores = [
    'UserA' => 80,
    'UserB' => 100,
    'UserC' => 80,
    'UserD' => 50
];

// 値が「80」のキーだけを取得
$targetKeys = array_keys($scores, 80);

print_r($targetKeys);
?>

実行結果

Array
(
    [0] => UserA
    [1] => UserC
)

array_keys($scores, 80) とすることで、値が 80 である要素のキー(UserAとUserC)だけが抽出されました。

同じ値を持つ要素が複数ある場合に、それらのキーをすべてリストアップしたい場合に役立ちます。

ループ処理でキーと値を順に取り出す foreach

配列の中身を一つずつ処理しながらキーも使いたい場合は、関数を使うよりも制御構文である foreach を使うのが定石です。

実務のコードでは、このパターンが最も頻繁に登場します。

キーと値を同時に取得する構文

foreach ($array as $key => $value) という書き方をすることで、ループの中で現在の要素のキーを利用できます。

<?php
$products = [
    'apple'  => 150,
    'orange' => 100,
    'banana' => 200
];

echo "<ul>\n";

foreach ($products as $name => $price) {
    // キー(商品名)と値(価格)を使って出力
    echo "<li>" . $name . " は " . $price . "円です。</li>\n";
}

echo "</ul>";
?>

実行結果

<ul>
<li>apple は 150円です。</li>
<li>orange は 100円です。</li>
<li>banana は 200円です。</li>
</ul>

$products as $name => $price の部分がポイントです。

矢印(=>)の左側変数($name)にキーが、右側変数($price)に値が代入されます。

変数名は自由に決められるため、中身が何であるか分かりやすい名前(ここでは $name$price)をつけるのが、読みやすいコードを書くコツです。

値から対応するキーを検索する array_search

「この値を持っているキーはどれ?」というように、値からキーを逆引きしたい場合は、array_search 関数を使用します。

ただし、見つかった「最初の1つ」しか返さない点に注意が必要です。

特定の値を検索してキーを取得する

<?php
$members = [
    101 => 'Suzuki',
    102 => 'Tanaka',
    103 => 'Yamada',
    104 => 'Tanaka' // 同名のメンバーがいる場合
];

// 'Tanaka' という値を持つキーを検索
$id = array_search('Tanaka', $members);

var_dump($id);
?>

実行結果

int(102)

array_search('Tanaka', $members) は、配列の中から 'Tanaka' という値を探し、最初に見つかった要素のキーである 102 を返しています。

ID 104 の Tanaka さんも存在しますが、array_search は最初に見つかった時点で検索を終了するため、102 だけが返されます。

重複する可能性があるデータの検索には注意しましょう。

また、見つからなかった場合は false が返されます。

最初や最後のキーだけをピンポイントで取得する

配列の「先頭のキー」や「末尾のキー」だけが欲しい場合、以前はポインタ操作などの面倒な手順が必要でしたが、現在は便利な専用関数が用意されています。

PHP 7.3以降であれば、以下の関数を使うのがベストプラクティスです。

array_key_first と array_key_last

<?php
$fruits = [
    'red'    => 'Apple',
    'yellow' => 'Banana',
    'purple' => 'Grape'
];

// 最初のキーを取得
$firstKey = array_key_first($fruits);

// 最後のキーを取得
$lastKey = array_key_last($fruits);

echo "最初のキー: " . $firstKey . "\n";
echo "最後のキー: " . $lastKey . "\n";
?>

実行結果

最初のキー: red
最後のキー: purple

array_key_first は配列の内部ポインタを動かさずに、純粋に「最初の要素のキー」を取得します。

array_key_last はその逆で「最後の要素のキー」を取得します。
これらは元の配列に影響を与えないため、非常に安全かつ高速にキーを取得できます。

応用編:キーが存在するか確認する array_key_exists

キーを取得する前に、「そもそもそのキーが存在するのか?」を確認したい場面も多いでしょう。
その場合は array_key_exists 関数を使います。

キーの存在チェックを行う

<?php
$config = [
    'host' => 'localhost',
    'user' => 'root',
    // 'password' キーは未定義
];

if (array_key_exists('password', $config)) {
    echo "パスワードは設定されています。";
} else {
    echo "パスワードキーが見つかりません。";
}
?>

実行結果

パスワードキーが見つかりません。

array_key_exists('キー名', $配列) で、指定したキーが配列内に存在するかどうかを真偽値(true/false)で返します。

似た機能に isset() がありますが、isset() は「キーが存在しても値が null だった場合」に false を返してしまいます。

値が null である可能性も含めて「キーの有無」だけを厳密に判定したい場合は、必ず array_key_exists を使いましょう。

PHPのスキルを活かして年収を上げる方法

以上、PHPで連想配列のキーを取得する方法について解説してきました。

なお、PHPのスキルがある場合には、「転職して年収をアップさせる」「副業で稼ぐ」といった方法を検討するのがおすすめです。

PHPエンジニアの需要は非常に高く求人数・案件数も多いため、転職によって数十万円の年収アップはザラで、100万円以上年収が上がることも珍しくありません。

なお、転職によって年収を上げたい場合は、エンジニア専門の転職エージェントサービスを利用するのが最適です。

今すぐ転職する気がなくとも、とりあえず転職エージェントに無料登録しておくだけで、スカウトが届いたり、思わぬ好待遇の求人情報が送られてきたりするというメリットがあります。

併せて、副業案件を獲得できるエージェントにも登録しておくと、空いている時間を活かして稼げるようなPHPの案件を探しやすくなります。

転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。