PHPでの配列操作メモ

配列、
基本的なのしか使わずに作りこんで
後から「あっ!こんなのあったのか」と
効率悪かったり、重くしてしまっていたことに気づいたり。

何の気なしに、別のこと調べてたら
偶然 便利な配列操作を見つけてみたり。

後々使えるな と思いながらも「アレ、何だっけ?」となるので、忘れないようにメモ。
他にもあれば、コメください。

複数の配列を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"));

ソート・並べ替え

オプション※1
デフォルトは『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 5.3.x で推奨されない機能にsplit()、spliti()があったので『文字列を分解』から削除@2010.08.06

配列→変数

連想配列を変数に展開する 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;

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です