array_combine, extract

array_combine

array_combine ― 一方の配列をキーとして、もう一方の配列を値として、ひとつの配列を生成する

PHP: array_combine - Manual

使いどころがわからなかったこの関数だけど、CSVフィアルを扱うプログラムを書いていて、キーに名前を付ける場合に便利なのでは、と思った。

<?php
$data   = array('Ichiro', '20', '090-1234-5678'); // CSVデータをsplitした結果と思ってください
$keys   = array('name', 'age', 'tel');
$items  = array_combine($keys, $data);
var_dump($items);

# array(3) {
#   ["name"]=>
#   string(6) "Ichiro"
#   ["age"]=>
#   string(2) "20"
#   ["tel"]=>
#   string(13) "090-1234-5678"
# }

fgetcsv() でファイルから読み込んだ CSV データの配列(上記コードの $data に相当)のキーは数値(0,1,2,...)になっている。数値で配列にアクセスすると、何のデータを操作しているのか分りづらくなるので、どうにかして項目名でアクセスしたくなる。そんなときに手っ取り早く名前を付けるのに使えるのでは*1

extract

extract ― 配列からシンボルテーブルに変数をインポートする<<

PHP: extract - Manual

上記のコードだと、キーは数値から項目名に変換できたけど、まだ依然として配列のままになっている。各項目を別々の変数に割り当てたいなんて時には、extract() を使うと便利。

<?php
$data   = array('Ichiro', '20', '090-1234-5678');
$keys   = array('name', 'age', 'tel');
$items  = array_combine($keys, $data);
extract($items);
var_dump($name, $age, $tel);

# string(6) "Ichiro"
# string(2) "20"
# string(13) "090-1234-5678"

配列のままの方が扱いやすいような気がするが、どうだろう。

*1:定数でアクセスするってのもあるけど...