こんにちは、さるまりんです。
今回は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
の要素を一つずつ取り出しながら、その$key
がplanet-
で始まるものだけ、配列$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
この部分が肝ですね。
読んでくださってありがとうございます。
それではまた!