PHPの基本に関するメモ。参考にしているのはPHPによるWebアプリケーションスーパーサンプル第2版の第7章(配列)です。
- array関数で配列を作成できる。中身は可変長引数であり、先頭から順に参照できる。参照する際にはforeachを使う方法がある。
-
$v = array("a", "b", "c"); foreach($v as $elem){ echo $elem; }
- array関数で単に値のみの配列とした場合、添字は0から始まる。
- array関数はmapのように扱うこともできる。つまり、次のような配列を作り、参照することができる。インデックス(mapだとキー)については数字でも文字列でも可。
-
$v = array("first" => "a", "second" => "b", "third" => "c"); echo $v["second"]; // "b"と表示される
-
- 配列の一括表示にはprint_r関数が使える。
- インデックスは一部だけ指定できる。途中に数字でインデックスを指定すると、その後でインデックスを省略したものについては指定した数字に続く数字がインデックスとして指定される。
- count関数は配列の要素数をカウントできる。
- array_count_values関数は配列の要素の出現頻度をカウントできる。
- 配列の結合はarray_merge関数が使える。同じ文字列型のインデックスがある配列を結合すると、インデックスの値は後で指定した配列で上書きされる。上書きしてほしくない場合は、array_merge_recursive関数を使う。こちらはインデックスに対応する値を単一の値ではなく、配列とすることにより、上書きを回避している。
- sort関数は配列の要素を並び替える。インデックスは無視される(要素の並び替えに合わせてインデックスも並び替えられるわけではない)。2番目の引数にSORT_STRINGとすると、値を文字列とみなしてソートすることができる。数値として並び替えるのであれば、SORT_NUMERICと指定する(省略した場合はこっちが優先される)。
- 配列を逆順にするにはarray_reverse関数を用いる。インデックスも並び替えられる。
- ksort関数を用いると、インデックスの昇順で並び替え、krsort関数を用いるとインデックスの降順で配列を並び替える。
- インデックスも合わせて値を並び替えるにはsort関数ではなくasort関数を用いる。降順に並び替えたければarsort関数を用いる。
- array_pad関数は配列を拡張して、指定した値で配列を要素を埋めていく関数である。
- range(a, b)とすると、array(a, a+1, ..., b)のように、指定した範囲の整数を値として持つ配列を作成できる(Pythonのrangeはbを含まないが、PHPは含む点に注意)。3番目に数値の間隔を指定することもできる。
- array_shift関数は配列の先頭要素を削除する。返り値は削除された先頭の値となる。逆に、先頭に追加するのはarray_unshift関数で、その返り値は要素数となる。
- array_popは配列末尾の値を削除する。返り値は削除された末尾の値となる。逆に、末尾に値を追加するのはarray_push関数で、その返り値は要素数となる。
- 途中にあるものを複数削除するにはarray_splice関数がある。array_spliceには値を置き換えるという機能もある。
- 配列からランダムに要素を取り出すのはarray_rand関数である。第2引数で値を指定することにより、ランダムに取り出す件数を指定できる。
- shuffle関数を用いると、配列をランダムに並び替える。元データを破壊することになるので、その点については注意。
- 配列の一部切り出しはarray_slice関数を用いる。
- 配列のコピーは$a2 = $a1が単純である。あるいはarray_aliceで先頭から切り出すと書いてもよい。
- array_sum関数は配列のデータを合計する機能がある。"10点"は10と解釈する。"p.10"は数値として評価されない(無視される)。
- 配列の各要素を関数で処理するにはarray_walk関数がある。array_walk関数は配列とユーザ定義関数を指定する。従って、PHPに初めからある関数を呼び出したい場合は、ユーザ定義関数の中で呼び出すことになる。
- compact関数は変数を配列にセットするための関数である。
-
$a = 1; $b = 2; $array = compact($a, $b); // a, bというインデックスが配列に含まれる
- 配列から要素に展開するにはlist関数を用いる。
-
$array = array(1, 2); list($a, $b) = $array; // $a, $bという変数に1, 2が入る
- ある要素が配列中にあるか判定する関数としてin_array関数がある。返り値はTRUE、FALSEのどちらかになる。
- ある要素が配列中にあればそのインデックスを返す関数としてarray_search関数がある。存在しないか調べるには返り値に対しis_numeric関数で判断すればよい(インデックスがすべて数字であればの話だが)。