配列配列関数(要素の追加・削除・取出・埋め、重複削除)
- array_fill〔配列を指定した値で埋める〕
- array_fill_keys
〔キーを指定して配列を値で埋める〕
- array_filter〔コールバック関数を使用する配列要素フィルタ〕
- array_pad〔指定長、指定した値で配列を埋める〕
- array_pop〔配列の末尾の要素を取り除く〕
- array_push〔配列の末尾に1つ以上の要素追加〕
- array_reduce
〔コールバック関数を用いて、配列を普通の値に変更して配列を再帰的に減らす〕
- array_shift〔配列の先頭から要素を1つ取り出す〕
- array_slice〔配列の一部を展開〕
- array_splice〔配列の一部を削除し、他の要素で置換〕
- array_unique〔配列から重複した値を削除〕
- array_unshift〔配列の先頭に1つ以上の要素を追加〕
array_fill
配列を指定した値で埋める
unknown
開始インデックスから、埋める数個分、埋める値で配列を埋めて返します。 第2引数埋める数は、1以上の数値を指定します。 1未満の値を指定した場合はE_WARNINGレベルのエラーが発生します。
<?
$input = array_fill(5, 4, 'banana');
print_r($input);
//Array ( [5] => banana [6] => banana [7] => banana [8] => banana )
?>
array_fill_keys 
キーを指定して配列を値で埋める
unknown
valueに指定した値で、配列の値を埋めて返します。 そのキーとして、keysで指定した値を使用します。
第1引数keysには、キーとして使用する値の配列を指定します。 キーとして無効な値を指定した場合は、文字列に変換されます。
第2引数valueには、埋めたい値を指定します。
<?
$keys = array('foo', 5, 10, 'bar');
$a = array_fill_keys($keys, 'banana');
echo nl2br(print_r($a, true));
/*
Array
(
[foo] => banana
[5] => banana
[10] => banana
[bar] => banana
)
*/
?>
array_filter
コールバック関数を使用する配列要素フィルタ
unknown
コールバック関数によりフィルタ処理が行われた配列の全要素を含む配列を返します。 第2引数コールバック関数がTRUEを返した場合、配列の現在の値が結果の配列に入ります。 配列が連想配列の場合、キーと値の関係は維持されます。
- コールバック関数によって配列自身を変更することはできません。
- 要素を追加・削除したり、この関数が適用される配列を unset()することはできません。
- コールバック関数を省略すると、配列の要素が全て削除されます(FALSEと等価)。
<?
function odd($var){
return($var % 2 == 1);
}
function even($var){
return($var % 2 == 0);
}
$arr1 = array("a"=>1,"b"=>2,"c"=>3,"d"=>4,"e"=>5);
$arr2 = array(6,7,8,9,10,11,12,13,14,15);
print_r(array_filter($arr1,"odd")); echo "<br>";
//Array ( [a] => 1 [c] => 3 [e] => 5 )
print_r(array_filter($arr2,"even"));
//Array ( [0] => 6 [2] => 8 [4] => 10 [6] => 12 [8] => 14 )
?>
array_pad
指定長、指定した値で配列を埋める
unknown
埋めるサイズで指定した長さになるように埋める値で埋めた配列のコピーを返します。 第2引数埋めるサイズの絶対値が、配列長さ以下の場合、埋める処理は行われません。
埋めるサイズ | 説明 |
---|---|
正の値 | 配列の右側が埋められます |
負の値 | 配列の左側が埋められます |
<?
$input[a] = "aaa";
$input[d] = "ddd";
$input[c] = "eee";
# 埋めるサイズに“正の値”を指定した場合(元配列 $input に変化なし)
# $result は、指定の長さになるまで、配列の“右側”が、指定した値で埋められます
$result = array_pad($input, 5, 0);
print_r($input);
//Array ( [a] => aaa [d] => ddd [c] => eee )
print_r($result);
//Array ( [a] => aaa [d] => ddd [c] => eee [0] => 0 [1] => 0 )
# 埋めるサイズに“負の値”を指定した場合(元配列 $input に変化かなし)
# $resultは、指定した長さになるまで、配列の“左側”が、指定した値で埋められます
$result = array_pad($input, -5, 0);
print_r($input);
//Array ( [a] => aaa [d] => ddd [c] => eee )
print_r($result);
//Array ( [0] => 0 [1] => 0 [a] => aaa [d] => ddd [c] => eee )
?>
array_pop
配列の末尾の要素を取り除く
unknown
配列の最後の要素を取り出して(削除して)返します。そのため、配列は要素1つ分短くなります。 配列が空または配列でない場合は、NULLを返します。
この関数使用後は、reset()で配列の内部ポインタを先頭に戻しましょう。
配列の最後に要素を追加する場合は、array_push()関数を使用してください。
<?
$fruit = array("apple","banana","grape");
$del_item = array_pop($fruit);
#削除された要素
echo $del_item; //grape
#削除後の配列
print_r($fruit); //Array ( [0] => apple [1] => banana )
#連想配列の末尾から要素を削除する場合
$fruit = array("a"=>"apple", "5"=>"banana", "grape");
array_pop($fruit);
#削除後の配列
print_r($fruit); //Array ( [a] => apple [5] => banana )
?>
array_push
配列の末尾に1つ以上の要素追加
unknown
渡された変数を配列の最後に追加します。 配列の長さは、渡された変数の数だけ増加します。
配列の最後から要素を削除する場合は、array_pop()関数を使用してください。
<?
$fruit = array("apple","banana","grape");
$fruit_length = array_push($fruit, "melon", "remon");
#追加後の配列の要素数を取得
echo $fruit_length; //5
#追加後の配列
print_r($fruit);
//Array ( [0] => apple [1] => banana [2] => grape [3] => melon [4] => remon )
#連想配列の末尾に要素を追加する場合
$fruit = array("a"=>"apple", "5"=>"banana", "grape");
array_push($fruit, "melon", "remon");
#追加後の配列
print_r($fruit);
//Array ( [a] => apple [5] => banana [6] => grape [7] => melon [8] => remon )
?>
array_reduce 
コールバック関数を用いて、配列を普通の値に変更して配列を再帰的に減らす
unknown
配列の各要素にコールバック関数を繰り返し適用し、配列を1つの値に減らします。
オプションの第3引数intialは、処理の最初で使用されたり、配列が空の場合の最終結果として使用されます。 配列が空で、initialが省略された場合はNULLを返します。
<?
if (function_exists('array_reduce')) {
function rsum($v, $w){
$v += $w;
return $v;
}
function rmul($v, $w){
$v *= $w;
return $v;
}
$a = array(1, 2, 3, 4, 5);
$x = array();
$b = array_reduce($a, "rsum"); //15
$c = array_reduce($a, "rmul", 10); //1200 (=10*1*2*3*4*5)
$d = array_reduce($x, "rsum", 1); //1
}
?>
array_shift
配列の先頭から要素を1つ取り出す
unknown
配列の最初の要素を取り出して返します。 そのため配列は要素1つ分短くなり全ての要素が前にずれます。 配列が空または配列でない場合はNULLを返します。
この関数使用後は、reset()で配列の内部ポインタを先頭に戻しましょう。
配列の先頭に要素を追加する場合は、array_unshift()関数を使用してください。
<?
$fruit = array("apple","banana","grape");
array_shift($fruit);
print_r($fruit); //Array ( [0] => banana [1] => grape )
$fruit = array("a"=>"apple", "5"=>"banana", "grape");
$del_item = array_shift($fruit);
#追加後の要素数
echo $del_item; //apple
#追加後の配列
print_r($fruit); //Array ( [0] => banana [1] => grape )
?>
array_slice
配列の一部を展開
unknown
配列から取出位置および取出す長さで指定された連続する要素を返します。 元配列の内容に変化はありません。
デフォルトで配列のキーをリセットするため、キーと値の関係は維持されませんが、PHP 5.0.2 以降では、オプションの第4引数キーのリセットにTRUEを指定すると、キーと値の関係を維持する事ができます。
取出位置や取出す長さは、添字としてではなく、配列の内部的な並び順に対して適用されることに注意して下さい。
取出位置 | 説明 |
---|---|
正の値 | 要素位置の計算は、配列の取出位置から始められる。 |
負の値 | 要素位置の計算は、配列の最後から行われる。 |
取出す長さ | 説明 |
---|---|
正の値 | 連続する複数の要素が返される。 |
負の値 | 配列の末尾から連続する複数の要素がされる。 |
省略 | 取出位置から配列の最後まで全要素が返される。 |
<?
$fruit = array("apple", "banana", "grape", "melon", "remon");
#配列fruitの2つ目の要素から3要素取り出す。
$arr = array_slice($fruit, 1, 3);
print_r($arr); //Array ( [0] => banana [1] => grape [2] => melon )
$input[0] = "aaa";
$input[1] = "bbb";
$input[2] = "ccc";
$input[3] = "ddd";
$input[4] = "eee";
$output = array_slice($input, 2); //2番目から最後まで取出
//Array("ccc","ddd","eee");
$output = array_slice($input, 2, -1); //2番目から最後から1つ目の要素まで取出
//Array("ccc","ddd");
$output = array_slice($input, -2, 1); //最後から2番目の要素から1つ取出
//Array("ddd");
$output = array_slice($input, 0, 3); //最初から3つ取出
//Array("aaa","bbb","ccc");
?>
array_splice
配列の一部を削除し、他の要素で置換
unknown
配列からオフセットおよび長さで指定された要素を削除して置換要素の配列で置換し、 抽出された要素を含む配列を返します。キーと値の関係は維持されません。
オフセット | 説明 |
---|---|
正の値 | 削除部分は配列の最初から数えたオフセット位置からとなる。 |
負の値 | 削除部分は配列の末尾から数えた位置からとなる。 |
長さ | 説明 |
---|---|
省略 | オフセットから配列の最後までが全て削除される。 |
正の値 | 複数の要素が削除。 |
負の値 | 削除されます部分は配列の末尾から複数の要素となる。 |
オプションの第4引数置換要素の配列を指定すると、削除された要素はこの配列の要素で置換されます。
<?
$arr = array("apple", "banana", "grape", "cherry", "lemon");
$del_item = array_splice ($arr, 2);
print_r($arr); // Array ( [0] => apple [1] => banana )
print_r($del_item); // Array ( [0] => grape [1] => cherry [2] => lemon )
?>
<?
/* 「長さ」が“負の値”の場合
削除される部分は配列の末尾から複数の要素となります
*/
$arr = array("apple", "banana", "grape");
$del_item = array_splice ($arr, 1, -1);
print_r($arr); // Array ( [0] => apple [1] => grape )
print_r($del_item); // Array ( [0] => banana )
?>
<?
/*「削除位置」から配列の最後まで全てを削除する場合
「長さ」を求めるために count($input) を使用すると便利です
*/
$arr = array("apple", "banana", "grape");
$del_item = array_splice ($arr, 1, count($arr), "CHERRY");
print_r($arr); // Array ( [0] => apple [1] => CHERRY )
print_r($del_item); // Array ( [0] => banana [1] => grape )
?>
<?
/* 「オフセット」が“正の値”の場合
配列の最初から数えた「オフセット」から削除されます
*/
$arr = array("apple", "banana", "grape");
$del_item = array_splice ($arr, -1, 1, array("CHERRY", "LEMON"));
print_r($arr); // Array ( [0] => apple [1] => banana [2] => CHERRY [3] => LEMON )
print_r($del_item); //A rray ( [0] => grape )
?>
オフセットおよび長さに何も削除しないと指定(0を指定)すると、 置換要素の配列の要素がオフセットで指定した位置に挿入されます。 置換される配列のキーと値の関係は維持されません。
<?
/* 「オフセット」「長さ」が 0 の場合
置換する配列の要素は、「オフセット」で指定した位置に挿入されます
*/
$arr = array("apple", "banana", "grape");
array_splice ($arr, 2, 0, array("CHERRY", "LEMON"));
print_r($arr);
/*
Array
(
[0] => apple
[1] => banana
[2] => CHERRY
[3] => LEMON
[4] => grape
)
*/
/* 「削除位置」が 0 の場合
置換する配列の要素は、配列の先頭に挿入されます
array_unshift($arr, $x, $y) とするのと同じです
*/
$arr = array("apple", "banana", "grape");
array_splice ($arr, 0, 0, array("CHERRY", "LEMON"));
print_r($arr);
/*
Array
(
[0] => CHERRY
[1] => LEMON
[2] => apple
[3] => banana
[4] => grape
)
*/
?>
もし置換要素の配列に要素が1つしかない(配列でない)場合は、array() で括る必要はありません。
<?
$arr = array("apple", "banana", "grape");
array_splice ($arr, 1, 1, "CHERRY");
print_r($arr);
?>
array_splice() と同等なもの
配列の最後に要素を追加: array_push($input, $x, $y);
と同じ
置換要素に配列を指定した場合、オフセットから配列の最後まで全削除するには、長さを求めるcount()関数を使うと便利です。
配列から最後の値を取出す: array_pop($input);
と同じ
配列の先頭の値を取り出す: arrary_shift($input);
と同じ
配列の先頭に要素を追加: array_unshift($input, $x, $y);
と同じ
配列$aの$xの位置に、$yを追加: $a[$x]=$y;
と同じ
array_unique
配列から重複した値を削除
unknown
値に重複のない新規配列を返します。 キーと値の関係は維持されます。 この関数はまず文字列として値をソートし、各値の最初のキーを保持し、2回目以降の全てのキーを無視します(ソート前の配列で最初の関連する値のキーが保持されるという意味ではありません)。
<?
$input[a] = "apple";
$input[b] = "banana";
$input[c] = "cocoa";
$input[1] = "apple";
$input[2] = "banana";
$unique = array_unique($input);
print_r($unique); //Array ( [a] => apple [b] => banana [c] => cocoa )
?>
array_unshift
配列の先頭に1つ以上の要素を追加
unknown
配列の先頭に1つ以上の要素を追加した追加後の要素を返します。 リストの要素は全体として加えられるため、加えられた要素の順番は変わりません。 キーが数値の場合、追加後の配列のキーは0から始まる連番に振り直されます。
配列の先頭から要素を削除する場合は、array_shift()関数を使用してください。
<?
$fruit = array("apple","banana","grape");
array_unshift($fruit,"melon");
print_r($fruit);
//Array ( [0] => melon [1] => apple [2] => banana [3] => grape )
$fruit = array("a"=>"apple", "5"=>"banana", "grape");
$add_length = array_unshift($fruit, "melon", "remon");
#追加後の要素数
echo $add_length; //5
#追加後の配列
print_r($fruit);
//Array ( [0] => melon [1] => remon [a] => apple [2] => banana [3] => grape )
?>