【PHP】特定の文字列で始まる配列のキーを抽出する4つの方法
PHPで配列を扱っていると、「特定のプレフィックス(接頭辞)で始まるキー」を持つ要素だけを取り出したい場面があります。この記事では、目的のキーを抽出するための代表的な4つの実装方法を、コード例とともにわかりやすく解説します。
方法1:foreachとexplodeを組み合わせる
もっとも基本的なのが、foreachループでキーを1つずつ確認し、explode()で区切った先頭部分が条件に一致するかを判定する方法です。
$arr_main_array = array('test_val' => 123, 'other-value' => 456, 'test_result' => 789);
foreach($arr_main_array as $key => $value){
$exp_key = explode('-', $key);
if($exp_key[0] == 'test'){
$arr_result[] = $value;
}
}
if(isset($arr_result)){
print_r($arr_result);
}
この例では「test_val」「test_result」のようなハイフン区切りのキーを分解し、先頭が「test」である要素の値だけを新しい配列に格納しています。
方法2:関数型アプローチ(array_filter_key風の関数)
コールバック関数を使ってキーをフィルタリングする、より宣言的な書き方です。なお、array_filter_key()は標準関数には存在しないため、必要に応じて独自に定義してから適用します。
$array = array_filter_key($array, function($key) {
return strpos($key, 'foo-') === 0;
});
strpos()の戻り値を「=== 0」と厳密に比較することで、「foo-」で始まるキーのみを正確に判定できます。緩い比較(==)を使うと意図しない結果になる可能性があるため注意しましょう。
方法3:strposを使った手続き型アプローチ
foreachループ内でstrpos()を直接呼び出し、条件に一致した要素をキーごと新しい配列へコピーするシンプルな方法です。
$val_1 = array();
foreach ($array as $key => $value) {
if (strpos($key, 'foo-') === 0) {
$val_1[$key] = $value;
}
}
方法1との違いは、元のキー名を保持したまま結果配列を作成できる点です。
方法4:ArrayIteratorを使ったオブジェクト指向アプローチ
SPLのArrayIteratorクラスを利用すれば、イテレータのvalid()・key()・current()・next()といったメソッドを通じて同じ処理を実現できます。
$i = new ArrayIterator($array);
$val_1 = array();
while ($i->valid()) {
if (strpos($i->key(), 'foo-') === 0) {
$val_1[$i->key()] = $i->current();
}
$i->next();
}
実行結果
上記のコードを実行すると、条件に一致したキーとその値だけが抽出され、次のような出力が得られます。
Array( [test_val] => 123 [test_result] => 789 )
このように、プレフィックスで始まるキーを持つ要素だけを効率よく取得できます。可読性を重視するなら方法3、既存のイテレーション処理に組み込みたいなら方法4など、用途やコードスタイルに応じて最適な手法を選択してください。
-
PHPで文字列が指定した単語で始まるかどうかを判定する方法
PHPでは、文字列が特定の文字列(プレフィックス)で始まっているかどうかを確認する関数を自作することができます。この関数は、条件に一致すれば TRUE を、一致しなければ FALSE を返します。本記事では、substr() 関数と strlen() 関数を組み合わせて、文字列の先頭部分を比較するシンプルな方法を紹介します。構文関数の基本的な構文は以下のとおりです。begnWith(str, begnStr)各パラメータの意味は次のとおりです。str − 検証対象となる文字列begnStr − 対象文字列の先頭にあるかどうかを調べたいテキストサンプルコード以下は実際の使用例です。関数内部では、
-
PHPのmb_list_encodings()関数でサポートされている全エンコーディングを配列として取得する方法
PHPのmb_list_encodings()関数は、現在の環境でサポートされているすべての文字エンコーディングを配列として返します。この関数はPHP 5以降のバージョンで利用可能です。マルチバイト文字列処理を行う際に、対応しているエンコーディングの一覧を確認したい場合に便利な関数です。構文array mb_list_encodings()パラメータmb_list_encodings()は引数を受け取りません。戻り値この関数は、サポートされているエンコーディング名を格納した数値インデックス付きの配列を返します。各要素には「UTF-8」や「SJIS」などのエンコーディング名が文字列として含まれま