PHPで配列の〇〇始まりのキーとその値を全て取り出す方法

こんにちは、さるまりんです。

今回はPHPで配列のキーが特定の文字列で始まるものだけを取り出す方法です。

こんな配列があります。

$array = [
    'planet-mercury' => '水星',
    'planet-venus' => '金星',
    'planet-earth' => '地球',
    'planet-mars' => '火星',
    'planet-jupiter' => '木星',
    'planet-saturn' => '土星',
    'planet-uranus' => '天王星',
    'planet-neptune' => '海王星',
    'planet-nine' => 'プラネット・ナイン',
    'satellite-moon' => '月',
    'star-sun' => '太陽',
];

太陽系の惑星と月、太陽を持つ配列です。(プラネット・ナインはあるのかな?あったとしての配列です。)

それぞれのキーが惑星はplanet-、衛星がsatellite-、恒星がstar-で始まっています。

ここから惑星だけ、キーがplanet-で始まるものだけを取り出すためのコードはこんな感じになります。

$planets = [];
foreach ($array as $key => $value) {
    if (strpos($key, 'planet-') === 0) {
        $planets[$key] = $value;
    }
}

$arrayの要素を一つずつ取り出しながら、その$keyplanet-で始まるものだけ、配列$planetsに格納しています。

print_r($planets);

で配列$planetsを表示するとこうなります。

Array
(
    [planet-mercury] => 水星
    [planet-venus] => 金星
    [planet-earth] => 地球
    [planet-mars] => 火星
    [planet-jupiter] => 木星
    [planet-saturn] => 土星
    [planet-uranus] => 天王星
    [planet-neptune] => 海王星
    [planet-nine] => プラネット・ナイン
)

惑星だけ取り出せてますね。

array_filter()関数を使って、こんな方法で取り出すこともできます。

$planets = array_filter($array, function($key){
    return strpos($key, 'planet-') === 0;
}, ARRAY_FILTER_USE_KEY);

どちらの方法でもs比較するコード

strpos($key, 'planet-') === 0

この部分が肝ですね。

読んでくださってありがとうございます。

それではまた!