PHP5技術者認定試験(上級)
資格試験に向けて勉強中です
勉強していて、PHPについて実は知らなかった/勘違いしていたことを記載します。
今回もほとんどが関数のざっくり解説になっています。
こんな配列関数もあるんだーと、新しい発見に繋がれば幸いです。
配列
-
インデックス配列 と 連想配列 があります。
-
キーに指定できるのは、整数と文字列のみ
-
可能ならば整数に変換される
- 浮動小数点
123.12
の場合、小数点を切り捨てた整数123
に変換される - 10進数に変換可能な文字列
"123"
は、整数123
に変換される - 10進数に変換できない
"0123"
は、文字列"0123"
のまま
- 浮動小数点
関数
関数 | 機能 |
---|---|
count( $var ) |
要素数を取得 |
sizeof( $var ) |
上に同じく 要素数を取得 |
array_pad( $input, $size, $value ) |
sizeの長さに達するまで、valueを末尾に継ぎ足す。 負の値を指定すると先頭に追加する |
配列の展開
関数 | 機能 |
---|---|
list( $v1, $v2, ... ) = $array
|
arrayの要素を変数v1, v2に格納する。 余った変数には NULL がセットされる。 |
array_slice( $array, $start, $len ) |
分割。startからlenの数を取り出した配列を返す |
array_chunk( $array, $size ) |
分割。size数ごとの塊にする。(1次元配列は2次元になる) |
array_splice( &$array, $start, [$len, [$replace]] ) |
削除。 参照渡し 。 startからlen数分の要素を削除。replaceを指定子た場合は、削除した場所にそれを挿入。 |
-
list() = $array
の構文は違和感のかたまり
キーや値の操作
-
isset($array[$key])
は、 キーが存在しても、値がNULLの場合はfalseを返す 。-
array_key_exsists($key, $array)
を使おう
-
-
array_search()
は最初に見つかったkeyのみ返す
in_array()
はPHPの良心
変数の展開
- 文字列内で2次元配列を展開する場合は波括弧で括る必要あり。
echo "値は {$array[0][0]}"
関数 | 機能 |
---|---|
extract( &$array [, $option, $prefix] ) |
キーと値を、変数名と値として、そのスコープに展開する。変態向けの関数。 |
compact( $value ) |
変数名と値を、キーと値とした配列を返す。同じく変態向け。 |
- compact()は、 引数が配列の場合は、 値の文字列がキーとなる
- extract()は、 変数名の接頭辞を指定可能
- この関数を使う人とは友達になりたくない
順次処理
-
foreach($array as $key => $val)
は、 配列のコピーを作成してから処理を行う ため、ループ中に要素数を変更しても変わらず処理する
イテレータ
関数 | 機能 |
---|---|
key( &$array ) |
イテレータが指す要素のキーを返す |
current( &$array ) |
イテレータが指す要素の値を返す |
each( &$array ) |
イテレータが指す要素の キーと値を配列にして 返す。イテレータを次へ移動 |
next( &$array ) |
イテレータを次へ移動し、その値を返す |
prev( &$array ) |
イテレータを前へ移動し、その値を返す |
end( &$array ) |
イテレータを末尾へ移動し、その値を返す |
reset( &$array ) |
イテレータを先頭へ移動し、その値を返す |
- いつかもし current() を使うときには
list($key, $val) = current($array)
としたいと思った。
要素に対する関数
関数 | 機能 |
---|---|
array_walk( &$array, $funcname[, $callbackの第三引数] ) |
それぞれの要素に関数を実行 |
array_map( $callback, $array1 [, $array2, ...] ) |
callbackの実行結果を配列にして返す。array1は第一引数の集合、array2は第二引数の集合 |
array_sum( $array ) |
値の和 |
array_product( $array ) |
値の積 |
array_reduce( $array, $callback [, $初期値] ) |
全部合計するとかができる(説明放棄) |
ソート
シンプルなもの
関数 | 機能 |
---|---|
sort( &$array ), rsort( &$array ) |
昇順/降順ソート。キーが振り直される。 |
asort( &$array ), arsort( &$array ) |
値でソート。キーはそのまま。 |
ksort( &$array ), krsort( &$array ) |
キーでソート。キーはそのまま。 |
usort( &$array, $callback ) |
ユーザー定義関数でソート。キーは振り直される。 |
uasort( &$array, $callback ) |
ユーザー定義関数(引数は値)でソート。キーはそのまま。 |
uksort( &$array, $callback ) |
ユーザー定義関数(引数はキー)でソート。キーはそのまま。 |
natsort( &$array ) |
自然順ソート。キーが振り直される。 |
natcasesort( &$array ) |
自然順ソート(大文字小文字を区別しない)。キーが振り直される。 |
他
関数 | 機能 |
---|---|
array_multisort( &$array1, &$array2 ) |
array1の順に合わせて array2の順も変わる |
array_reverse( &$array ) |
逆順に並べ替える |
array_flip( &$array ) |
キーと値を入れ替える |
shuffle( &$array ) |
ランダムに並べ替え。キーが振り直される。 |
- array_multisort()の optionは
SORT_ASC
SORT_DESC
など
演算
関数 | 機能 |
---|---|
array_merge( $array1, $array2 ) |
マージ |
array_diff( $array1, $array2 ) |
差分を集めた配列を返す |
array_fillter( $array1, $funcname ) |
関数の結果がtrueのものを配列にして返す。 キーはそのまま |
array_unique( $array ) |
重複を削除。 キーはそのまま |
array_intersect( $array1, $array2 ) |
重複のみを返す逆diff。 キーはそのまま |
追加と削除
関数 | 機能 |
---|---|
array_unshift( &$array, $val ) |
先頭に追加 |
array_shift( &$array ) |
先頭を削除 |
array_push( &$array, $val ) |
末尾に追加 |
array_pop( &$array ) |
末尾を削除 |
そこはかとなく js っぽさを感じる
他のtips
キーを指定しない場合 1
$arr = [];
$arr["qiita"] = "a";
$arr[] = "b";
$arr[] = "c";
上記の場合 [ "qiita" => "a", 0 => "b", 1 => "c" ] となる
キーを指定しない場合 2
$arr = [];
$arr[] = "a";
$arr[3] = "b";
$arr[] = "c";
上記の場合 [ 0 => "a", 3 => "b", 4 => "c" ] となる
整数添字は最大数をインクリメントしていくんですね。
終わりに
PHPの配列関数、痒いところに手が届くものもあれば
コンパイル言語使用者が見たら吐き気を催すものまでありますね…。
いいね!頂けると勉強が捗ります。