配列、
基本的なのしか使わずに作りこんで
後から「あっ!こんなのあったのか」と
効率悪かったり、重くしてしまっていたことに気づいたり。
何の気なしに、別のこと調べてたら
偶然 便利な配列操作を見つけてみたり。
後々使えるな と思いながらも「アレ、何だっけ?」となるので、忘れないようにメモ。
他にもあれば、コメください。
複数の配列を1つの配列にする
重複しても値を保持 array_merge_recursive()
配列 = array_merge_recursive(配列, 配列, [配列...]);
キーと値の関係維持 +
配列 = 配列 + 配列;
※キーと値の関係を維持するが、同じキーのものは最初の要素が有効とする
値更新・キー振り直し array_merge()
配列 = array_merge(配列, 配列, [配列...]);
※連想配列のとき、同じキーのものは上書きされ、最後の要素が有効とする
※キーが数字または数字と判別されそうな文字列の場合、番号が振りなおされてしまう。
※上3点の動きの差については下記にまとめた。
>>[PHP]複数の配列を1つの配列にする
要素追加
配列の末尾に要素を追加 array_push()
追加後の要素数 = array_push(配列, 追加する要素1, 追加する要素2, …);
※配列が直接変更される。
配列の先頭に要素を追加 array_unshift()
追加後の要素数 = array_unshift(配列, 追加する要素1, 追加する要素2, …);
※配列が直接変更される。
配列を指定した値で足りない部分を埋める array_pad()
基盤配列 = array('a'=>111,'bb'=>22,'ccc'=>3);
配列 = array_pad(基盤配列, 合計配列数, 埋める値);
※合計配列数と比較して基盤配列の足りない分だけ、指定内容で補充
要素削除
配列の末尾の要素を削除 array_pop()
末尾の要素 = array_pop(配列);
※配列が直接変更される。
配列の先頭の要素を削除 array_shift()
先頭の要素 = array_shift(配列);
※配列が直接変更される。
配列の内部ポインタから取得
配列の『最初の要素』を取得 reset()
配列の最初の要素 = reset(配列);
『配列の最後の要素』を取得 end()
配列の最後の要素 = end(配列);
現在の要素の『次の要素』を取得 next()
現在の要素の次の要素 = next(配列);
※値が空の要素のとき、『false』を返す
現在の配列の『前の要素』を取得 prev()
現在の配列の前の要素 = prev(配列);
※値が空の要素のとき、『false』を返す
要素操作
配列の要素を置換する array_splice()
配列 = array_splice(配列, 削除開始位置, [削除する個数], [置換する新しい要素(配列)]);
配列の要素をランダムに並べ替える shuffle()
shuffle(配列);
※ PHP4なら、random() 同様、実行前には『srandom() 』か『mt_srandom() 』をすること
※配列が直接変更される。
配列の要素数を取得 count()/sizeof()
要素数 = count(配列);
要素数 = sizeof(配列);
※配列に要素がない場合は『0』配列でない場合は『1』を返す。
キーを大文字か小文字に一括変換 array_change_key_case()
配列 = array_change_key_case(配列, [オプション]);
配列の値の合計を取得 array_sum()
合計値 = array_sum(配列)
※文字列『50』は数字『50』となり、『文字』は0、のように数字変換してから計算する。
条件取得
配列から任意の要素をだけ取得 array_slice()
配列 = array_slice(配列, 取り出し開始位置, [取り出し個数]);
配列の要素をランダムに取得 array_ random()
要素のキー = array_rand(配列, [取り出す要素数]);
※ PHP4なら、random() 同様、実行前には『s random() 』か『mt_s random() 』をすること
配列のキーを取得
配列のポインタが指し示している要素のキーを取得 key()
キー = key(配列);
※何もしてなければ、最初のキーを返してくれる。
配列のキーの一覧を取得する array_keys()
キーの配列 = array_keys(配列, [値]);
配列の値を取得
配列のポインタが指し示している要素の値を取得 current()/pos()
値 = current(配列);
値 = pos(配列);
※何もしてなければ、最初の値を返してくれる。
配列の値の一覧を取得する array_values()
値の配列 = array_values(配列);
最初から指定分の要素の値を取得 list()
list(カラム1,カラム2,…) = 配列;
list($today,$tomorrow,$yesterday) = array("今日","明日","昨日");
とすると
$today = "今日"; $tomorrow = "明日"; $yesterday = "昨日";
配列の『最小の値』を返す min()
値 = min(配列);
※数字以外は『0』で返してしまうので、数字であることが条件。
配列の『最大の値』を返す max()
値 = max(配列);
※数字以外は『0』で返してしまうので、数字であることが条件。
配列のキーと値を同時に操作
配列のキーと値を取得 each()
配列 = each(配列);
$arrDay = array("今日"=>"today", "明日"=>"tomorrow"); $arrShow = each($arrDay);
とすると
$arrShow = array(1=>"today","value"=>"today",0=>"今日","key"=>"今日");
配列のキーと値を入れ替え array_flip()
配列 = array_flip(配列);
配列の要素の順序を逆転させる array_reverse()
配列 = array_reverse(配列, [フラグ]);
※フラグでtrueを指定しないとキーと値の関係を確保しない。(デフォルトfalse)
$input = array("php", 4.0, array("green", "red"));
として、
false(デフォルト)なら
$array = array_reverse($input); $array = array(2 => array(0 =>"green", 1 =>"red"), 1 => 4, 0 => "php");
trueなら
$array = array_reverse($input,true); $array = array(2 => "php", 1 => 4, 0 => array(0 =>"green", 1 =>"red"));
ソート・並べ替え
デフォルトは『SORT_REGULAR(標準的な並べ替え)』だが
『SORT_NUMERIC』を指定し『数値として』並べ替えしたり
『SORT_STRING』を指定し『文字列として』並べ替えしたり出来る
配列をキーで昇順で並べ替える ksort()
ksort(配列, [オプション※1]);
配列をキーで降順で並べ替える krsort()
krsort(配列, [オプション※1]);
配列を値で昇順で並べ替える sort()
sort(配列, [オプション※1]);
※連想配列には使えない。キーを数字で振りなおされてしまう。
配列を値で降順で並べ替える rsort()
rsort(配列, [オプション※1]);
※連想配列には使えない。キーを数字で振りなおされてしまう。
配列のキーと値の関係を崩さずに昇順で並べ替え asort()
asort(配列, [オプション※1]);
配列のキーと値の関係を崩さずに降順で並べ替え arsort()
arsort(配列, [オプション※1]);
配列を人間的自然順に並べ替える natsort()
natcasersort(配列);
$array =array('IMG0.png', 'img12.png', 'img10.png', 'img2.png', 'img1.png', 'IMG3.png'); natsort($array);
とすると
$array =array('IMG0.png', 'img1.png', 'img2.png', 'IMG3.png', 'img10.png', 'img12.png');
配列を人間的自然順に大文字と小文字を区別して並べ替える natsort()
natsort(配列);
$array =array('img12.png', 'img10.png', 'img2.png', 'img1.png'); natsort($array);
とすると
$array =array('img1.png', 'img2.png', 'img10.png', 'img12.png');
配列検索
配列の要素を検索し、一致するものがあるか返す in_array()
論理値(false or true) = in_array(検索語, 配列, [型チェック(true|false)]);
配列のキーを検索し、一致するものがあるか返す array_key_exists()
論理値(false or true) = array_key_exists(検索語, 配列);
配列の要素を検索し、検索値を返す array_search()
要素のキー = array_search(検索語, 配列);
配列比較
重複する値を配列から除去 array_unique()
配列 = array_unique(配列);
※文字列『50』=数字『50』として判別。
※5.2.8以前は第2引数が使えない。多次元配列でなければマシとのこと。
配列同士で比較し、一致する値を返す array_intersect()
配列 = array_intersect(配列, 配列, [配列...]);
配列同士で比較し、一致するキーを返す array_intersect_key()
結果配列 = array_intersect_key(配列1, 配列2, [配列3...]);
※結果配列のキーは該当キー、その値は配列1にある該当キーの値を返す
配列同士で比較し、キーと値の組み合わせが一致する部分を返す array_intersect_assoc()
結果配列 = array_intersect_assoc(配列1, 配列2, [配列3...]);
※結果配列のキーは該当キー、その値は配列1にある該当キーの値を返す
配列同士で比較し、一致しない値を返す array_diff()
配列 = array_diff(配列, 配列, [配列...]);
配列同士で比較し、一致しないキーを返す array_diff_key()
配列 = array_diff_key(配列, 配列, [配列...]);
※結果配列のキーは該当キー、その値は配列1にある該当キーの値を返す
配列同士で比較し、キーと値の組み合わせが一致しない部分を返す array_diff_assoc()
配列 = array_diff_assoc(配列, 配列, [配列...]);
※結果配列のキーは該当キー、その値は配列1にある該当キーの値を返す
変数→配列
複数の変数をまとめて連想配列を作成する compact()/compact()
compact(変数名, 変数名, [変数名...]);
compact(変数名を格納した配列);
文字列を分解して配列にする explode()
配列 = explode(分解文字列, 文字列 [,分解数]);
※split()では、分解文字に正規表現を使用できるが、その分explode()より速度が遅い。
※分解数を指定すると、その数しか要素を分解しない。
PHP 7.0.0で削除され、完全に使えなくなった@2019.9
文字列を分解して配列にする(正規表現) preg_split()
配列 = preg_split (正規表現の分解文字列, 文字列 [, 分解数] [, 分解方法指定フラグ])
splitが使えないこれからは、正規表現はこっちである。
文字列を分解して配列にする str_split()
配列 = str_split (文字列 [, 分解数] )
1 文字ずつ分割された配列にする
配列→変数
連想配列を変数に展開する extract()
変数の数 = extract(連想配列, オプション, 接頭辞]);
※添字配列にこの関数を使用しても変数に展開できない。
※オプションで、変数名が重複した際の処理方法を指定することが可能。
※オプションに接頭辞をつけるようにした場合、変数名は「$接頭辞_変数名」。
(『_』をつけると正常に動作しないこと有)
※オプションの種類は以下
『EXTR_OVERWRITE』同名の変数を上書き
『EXTR_SKIP』同名の変数は無視
『EXTR_PREFIX_SAME』同名の変数には接頭辞をつける
『EXTR_PREFIX_ALL』展開したすべての変数に接頭辞をつける
『EXTR_PREFIX_INVALID』展開した変数名が無効なときは接頭辞をつける
配列を連結して文字列にする implode()/join()
文字列 = implode(連結語, 配列);
文字列 = join(連結語, 配列);
配列作成
配列を指定した値で配列作成 array_fill()
配列 = array_fill(配列最初の数字, 配列作成数, 埋める値);
配列を指定した値で配列作成 array_fill_keys()
配列のキーとなる配列 = array('キー1', キー2, 'キー3');
配列 = array_fill_keys(配列のキーとなる配列, 埋める値);
※配列のキーとなる配列は何個でも、数字でも文字列でもOK
※PHP5から。
一定範囲の整数を値とする配列を作成 range()
配列 = range(開始値, 終了値);
$array = range(2, 5);
とすると
$array[0]=2; $array[1]=3; $array[2]=4; $array[3]=5;
コメント