過去記事の配列関数をまとめてみました。
~系の表記は私の造語(?)なのでもっといい感じの奴があれば教えてください!
関数名は全部マニュアルにリンクしてるので、詳細はマニュアルをどうぞ!
配列操作系
要素の追加や削除、置き換えなど、配列の構成を変える関数
配列の要素そのものを加工はしない。
array_shift
array_shift ( array &$array )
配列の先頭を切り取って返す。
返り値は配列の先頭にいた値。元の配列からはその値はなくなる。
添え字が数値だった場合は添字も振りなおされる。
元の配列から値をシフトする。
$arr = array("banana","orange","apple","peach","grape");
print_r($arr);
/*
Array
(
[0] => banana
[1] => orange
[2] => apple
[3] => peach
[4] => grape
)
*/
$fruit = array_shift($arr);
print_r($arr);
/*
Array
(
[0] => orange
[1] => apple
[2] => peach
[3] => grape
)
*/
print_r($fruit)
// banana
array_pop
array_pop ( array &$array )
array_shift
の最後バージョン。最後を切り取って返す。
数字なら添字も詰まるので、array_pop
した後要素を追加した場合はその位置に入る。ポップアップとかのイメージ。なぜpullとかpickにしてくれなかったのか…。
$arr = array("banana","orange","apple","peach","grape");
print_r($arr);
/*
Array
(
[0] => banana
[1] => orange
[2] => apple
[3] => peach
[4] => grape
)
*/
$fruit = array_pop($arr);
print_r($arr);
/*
Array
(
[0] => banana
[1] => orange
[2] => apple
[3] => peach
)
*/
print_r($fruit);
// grape
$arr[] = "mango";
print_r($arr);
/*
Array
(
[0] => banana
[1] => orange
[2] => apple
[3] => peach
[4] => mango
)
*/
array_unshift
array_unshift ( array &$array ,"追加する値"[,"追加する値"] )
1つ以上の要素を配列の先頭に追加。追加する順は引数として与えた順序のまま。添字が数値なら0から振りなおされる。
shift(取り出し)の逆だからunshiftなんだろうけど…いまいちピンとこない。
$arr = array("banana","orange","apple","peach","grape");
print_r($arr);
/*
Array
(
[0] => banana
[1] => orange
[2] => apple
[3] => peach
[4] => grape
)
*/
array_unshift($arr,"mango","melon");
print_r($arr);
/*
Array
(
[0] => mango
[1] => melon
[2] => banana
[3] => orange
[4] => apple
[5] => peach
[6] => grape
)
*/
array_push
array_unshift
の後ろバージョン。最後に値を追加。
$arr[]
と動きは同じ。1個だけなら$arr[]
の方が早い。
配列の後ろに値を押し付ける、なイメージ。
$arr = array("banana","orange","apple","peach","grape");
print_r($arr);
/*
Array
(
[0] => banana
[1] => orange
[2] => apple
[3] => peach
[4] => grape
)
*/
array_push($arr,"mango","melon");
print_r($arr);
/*
Array
(
[0] => banana
[1] => orange
[2] => apple
[3] => peach
[4] => grape
[5] => mango
[6] => melon
)
*/
array_slice
array_slice ( array $array , 開始位置 [, 個数 [, キーを維持するかどうか ]] )
配列の切り出し。指定された位置の配列を返す。
個数を指定しない場合は開始位置から末尾まで。
負の数の場合は末尾からの数。
元の配列はそのまま。
$arr = array("banana","orange","apple","peach","grape");
print_r($arr);
/*
Array
(
[0] => banana
[1] => orange
[2] => apple
[3] => peach
[4] => grape
)
*/
$arr1 = array_slice($arr,2);
print_r($arr1);
/*
Array
(
[0] => apple
[1] => peach
[2] => grape
)
*/
$arr2 = array_slice($arr,-2);
print_r($arr2);
/*
Array
(
[0] => peach
[1] => grape
)
*/
$arr3 = array_slice($arr,-4,-1);
print_r($arr3);
/*
Array
(
[0] => orange
[1] => apple
[2] => peach
)
*/
$arr4 = array_slice($arr,2,-1);
print_r($arr4);
/*
Array
(
[0] => apple
[1] => peach
)
*/
$arr5 = array_slice($arr,2,-1,true);
print_r($arr5);
/*
Array
(
[2] => apple
[3] => peach
)
*/
array_splice
array_splice ( array &$input , 削除開始位置 [, 個数[, 置き換える配列]] )
配列の一部を削除し、空いた部分に代わりの配列を置く。
キーは維持されない。
$arr = array("banana","orange","apple","peach","grape");
print_r($arr);
/*
Array
(
[0] => banana
[1] => orange
[2] => apple
[3] => peach
[4] => grape
)
*/
array_splice($arr,1,3,array("mango","melon"));
print_r($arr);
/*
Array
(
[0] => banana
[1] => mango
[2] => melon
[3] => grape
)
*/
array_merge
array array_merge ( array $array1 [, array $... ] )
ひとつまたは複数の配列をマージする
キーが同じ文字列の場合は__後ろの値1__で上書き 。
キーが数字の場合は0から振りなおされて値は追記される。
$ar1 = array("color" => array("favorite" => "red"), 5);
$ar2 = array(10, "color" => array("favorite" => "green", "blue"));
print_r(array_merge_recursive($ar1, $ar2));
/*
Array
(
[color] => Array
(
[favorite] => green //$ar1["color"]["favorite"]の"red"が上書きされてなくなる
[0] => blue //$ar2["color"][0]の値が追記
)
[0] => 5 //$ar1[0]
[1] => 10 //$ar2[0]
)
*/
array_merge_recursive
array array_merge_recursive ( array $array1 [, array $... ] )
二つ以上の配列を再帰的にマージする
キーが同じ文字列の場合は一つの配列にまとめられる。
キーが数字の場合は0から振りなおされて値は追記される。
$ar1 = array("color" => array("favorite" => "red"), 5);
$ar2 = array(10, "color" => array("favorite" => "green", "blue"));
print_r(array_merge_recursive($ar1, $ar2));
/*
Array
(
[color] => Array
(
[favorite] => Array
(
[0] => red //$ar1["color"]["favorite"]
[1] => green //$ar2["color"]["favorite"]
)
[0] => blue //$ar2["color"][0]
)
[0] => 5 //$ar1[0]
[1] => 10 //$ar2[0]
)
*/
配列処理系
配列の要素そのものを足したり、ひとつひとつに処理を施したりする。
array_sum
array_sum ( array $array )
配列の中の値の合計を計算する
$arr = array(1,3,5,7,9);
echo array_sum($arr);
/*
25
*/
array_filter
array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )
$callback
の関数で$array
の配列をフィルタリングし、結果がtrueの場合に$array
の現在の値が結果の配列に入る。キーは保持。
※コールバック関数は真偽を返すものである必要がある
function odd($num){
//奇数かどうかを返す
return($num & 1);
}
function even($num){
//偶数かどうかを返す
return(!($num & 1));
}
$arr = [1,2,3,4,5];
print_r(array_filter($arr,"odd"));
/*
Array
(
[0] => 1
[2] => 3
[4] => 5
)
*/
print_r(array_filter($arr,"even"));
/*
Array
(
[1] => 2
[3] => 4
)
*/
//PHP5.3以上なら無名関数がつかえる
$arr = array("banana","orange",2,"apple","peach","grape",6);
print_r($arr);
/*
Array
(
[0] => banana
[1] => orange
[2] => 2
[3] => apple
[4] => peach
[5] => grape
[6] => 6
)
*/
$arr1 = array_filter($arr, function($val){ return is_string($val); });
print_r($arr1);
/*
Array
(
[0] => banana
[1] => orange
[3] => apple
[4] => peach
[5] => grape
)
*/
array_map
array array_map ( callable $callback , array $array1 [, array $array2…] )
$array1
の各要素に $callback
の関数を適用した後、 その全ての要素を含む配列を返す。array_map
に渡される配列の数と、$callback
が受け付けるパラメータの数は一致している必要がある。
2つ以上の配列を使う時、配列の長さは等しい必要がある。
もし長さが違った場合は、短い方を空の要素で埋めて、長い方に合わせる。
function en($n,$m){
return ($n."は英語で【".$m."】です。");
}
function fr($n,$m){
return ($n."はフランス語で【".$m."】です。");
}
$arr1 = [1,2,3,4,5,6];
$arr2 = ["one","two","three","four","five","six"];
$arr3 = ["un","deux","trois","quatre","cinq"];
print_r(array_map("en",$arr1,$arr2));
/*
Array
(
[0] => 1は英語で【one】です。
[1] => 2は英語で【two】です。
[2] => 3は英語で【three】です。
[3] => 4は英語で【four】です。
[4] => 5は英語で【five】です。
[5] => 6は英語で【six】です。
)
*/
print_r(array_map("fr",$arr1,$arr3));
/*
Array
(
[0] => 1はフランス語で【un】です。
[1] => 2はフランス語で【deux】です。
[2] => 3はフランス語で【trois】です。
[3] => 4はフランス語で【quatre】です。
[4] => 5はフランス語で【cinq】です。
[5] => 6はフランス語で【】です。//$arr3の要素は5つしかないので【】の中は空になる
)
*/
配列の配列を生成
コールバック関数の名前としてNULLを用いることで配列の配列を構築することができる2
print_r(array_map(null,$arr1,$arr2,$arr3));
/*
Array
(
[0] => Array
(
[0] => 1
[1] => one
[2] => un
)
[1] => Array
(
[0] => 2
[1] => two
[2] => deux
)
[2] => Array
(
[0] => 3
[1] => three
[2] => trois
)
[3] => Array
(
[0] => 4
[1] => four
[2] => quatre
)
[4] => Array
(
[0] => 5
[1] => five
[2] => cinq
)
[5] => Array
(
[0] => 6
[1] => six
[2] =>
)
)
*/