■配列の種類
インデックス配列
キーが数字の、いわゆる普通の配列。
<?php $ary = array(10, 20, 30); ?>
連想配列
キーが文字列。特に連想配列の場合は以下のように記述して縦の列を揃えると、コードが見やすくなる。
<?php $ary = array( 'a' => 'John', 'b' => 'Nick', 'c' => 'Michel' ); ?>
■配列の生成方法
関数を使う
<?php $ary = array(1, 3, 7); ?>
[]を使う
存在しない配列にデータを代入しようとすると、その時点で配列が生成される。その原理を利用する方法。
<?php $ary[0] = 1; $ary[1] = 3; $ary[2] = 7; ?>
各関数について
- array array([mixed $var, …])
- 配列を生成する。但し、実際には関数ではなく言語構造である。
■配列の表示
デバッグなどを目的として配列の構造と要素を表示したい時、以下の2つの関数は各要素を再帰的に表示する。
print_r()
第2引数にtrueを設定する事により戻り値を発生させ、変数に値を格納させる事ができる。また配列のポインタは末端に移動する。
<?php $ary = array( 1 => 'sample', 'a' => array(1,5,9), 2 => 5 ); print_r($ary); /* Array ( [1] => sample [a] => Array ( [0] => 1 [1] => 5 [2] => 9 ) [2] => 5 ) */ ?>
var_dump()
引数に1つ以上の変数をとり、複数の変数を表示させる事ができる。より詳細なデータが見れるので、デバッグ目的ではコチラの関数を個人的には多用している。
<?php $ary = array( 1 => 'sample', 'a' => array(1,5,9), 2 => 5 ); var_dump($ary); /* array(3) { [1]=> string(6) "sample" ["a"]=> array(3) { [0]=> int(1) [1]=> int(5) [2]=> int(9) } [2]=> int(5) } */ ?>
各関数について
- mixed print_r(mixed $expression[, bool $return=false])
- 指定した変数の詳細を型に合わせて表示する。但し、第二引数に「true」を設定すると値を返す。
- void var_dump(mixed $expression[, mixed $expression])
- 指定した変数の詳細を型に合わせて表示する。複数の変巣を一度に表示することができる。
■配列末尾への値の追加
以下のコードは、0から始まる数値のうち、最初に見つかった空きインデックスに要素を追加する方法。連想配列に対しても使用が可能であり、0から数値が割り当てられていくが、通常ではそのような使用はしない。
<?php $person[0] = 'Mike'; $person[] = 'Nick';//1が割り当てられる ?>
但し、0から始まる数値のうち任意の正の数字インデックスが使用されている場合は、以下のようにそのインデックスの次の数字から値が格納されていく。
<?php $tmpAry = array(); $tmpAry[10] = '1'; $tmpAry[] = 'test';//11が割り当てられる var_dump($tmpAry); /* array(2) { [10]=> string(1) "1" [11]=> string(4) "test" } */ ?>
■Multi-dimentional Arrays(多次元配列)
<?php $ary = array(); $ary[] = array( 'Nick', 'John' ); $ary[] = array( 'Emily', 'Naomi' ); print("Hello, {$ary[0][1]} and {$ary[1][1]}"); ?>
活用例
$tmpAry = array(); foreach($ary as $key => $value){ if(!is_array($tmpAry[$key])){ $tmpAry[$key] = array(); } $tmpAry[$key]['id'] = $value['id']; $tmpAry[$key]['value'] = $value['value']; }
よりも以下のコードの方が美しいと思う。
$tmpAry = array(); foreach($ary as $key => $value){ $tmpAry[] = array( 'id' => $value['id'], 'value' => $value['value'], ); }
■配列の展開
listは実際には言語の構成要素であり戻り値を発生させない。また左辺のlistの引数が多い場合、余った変数にnullが代入される。右辺の配列の要素数が多い場合、特に問題は発生しない。
<?php $peple = array('John', 'Mike', 'Nick'); list($person1, $person2, $person3) = $people; ?>
以下のような場合に有用かもしれない。
<?php $sql = "SELECT `name`, `age`, `job` FROM `data`"; $result = mysql_query($sql); while(list($name, $age, $job) = $mysql_fetch_row($result)){ echo "{$name}({$age}) - {$job}"; } ?>
但し、個人的には以下のようにループを使って処理するタイプなのでlistを使うことは少ない。
<?php $sql = "SELECT `name`, `age`, `job` FROM `data`"; $result = mysql_query($sql); while($row = mysql_fetch_array($result)){ echo "{$row['name']}({$row['age']}) - {$row['job']}"; } ?>
各関数について
- void list(mixed $var[, …])
- 複数の変数に配列の値を格納する。実際には関数ではなく言語構造である。