配列

添字が0以上の数値か文字列を扱う配列についての説明です。
添字に整数か文字列以外は指定できません。


配列を定義する

array()関数を使って配列を定義します。

$ary = array(); 
$ary = array("chair", "desk", "book");   // => "chair","desk","book"

$ary[0];   // => "chair"

連想配列を定義する

配列を定義するようにarray()関数を使って定義します。要素にはkey =< value の形で設定します。要素を取り出すときはkeyを指定します。

$ary = array("chair" => "wood", "desk" => "iron");    // =>("chair"="wood"),("desk"="iron")

echo $ary["chair"];   // => "wood"


多重配列を定義する

配列の要素として配列を定義します。

$ary = array(
    array(),array(),array()
); 
$ary = array(
    array("chair1", "chair2"),
    array("desk1", "desk2"),
    array("book1", "book2")
);
// => "chair1","chair2"
//       "desk1","desk2"
//       "book1","book2"

$ary[1][1]; // => "desk2"

指定した値で埋める(array_fill,range)

array_fill()かrange()を使用します。

// array_fill(開始要素番号,終了要素番号,埋める値)
$ary = array_fill(1,3, "desk");
echo $ary[0] . "\n";    // => Undefined offset :0
echo $ary[1] . "\n";    // => desk
echo $ary[2] . "\n";    // => desk
echo $ary[3] . "\n";    // => desk

range()は指定した開始番号から終了番号までの値で埋めます。整数のみ扱えます。

// range(スタート,エンド,間隔)
$ary = range(2, 8, 2);    // =>2,4,6,8

配列をキー、値として連想配列を作る(array_combine)

array_combine()関数を使います。キーとする配列と値とする配列をそれぞれ組み合わせます。要素数が合致しない場合はFALSEを返します。

$ary1 = array("chair", "desk", "book");
$ary2 = array(4, 1, 10);
$ary = array_combine($ary1, $ary2);    // =>("chair"=4),("desk"=1),("book"=10)

すべての要素に対して処理する(array_walk)

一番始めの要素から最後の要素まで順番に処理します。

$ary = array("chair", "desk", "book");
foreach($ary as $a){
    echo $a;
}

for($i=0 ; $i < count($ary) ; $i++){
    echo $ary[$i];
}

複雑な操作をしたい場合はarray_walk関数を使います。与えた配列が変更されます。

function addStr(&$v, $key, $str){
    $v = $str . $v;
}

$ary = array(2,8,3,4,1,7,9,0);
array_walk($ary, "addStr", "0");    // =>"02","08","03","04","01","07","09","00"

連想配列のすべての要素に対して処理する

配列と似ていますが、foreachの要素を受け取るとき、key =< value の形をとります。

$ary = array("chair" => "wood", "desk" => "iron");
foreach($ary as $key => $value){
    echo "(" . $key . "," . $value . ")\n";   // => (chair=wood) (desk=iron)
}

要素数を数える(count)

count()関数の引数に配列を渡します。

$ary = array("chair", "desk", "book");
$cnt = count($ary);    // => 3

末尾に要素を加える(array_push)

array_push()関数を使う方法と、配列変数に[]と記述することで末尾に追加する方法があります。array_push関数では一度に複数の要素を追加できます。

$ary = array("chair", "desk", "book");
$ary[] = "bed";    // => "chair","desk","book","bed"
array_push($ary, "light", "window");    // => "chair","desk","book","bed","light","window"

最初に要素を加える(array_unshift)

array_unshift()関数を使います。可変引数で複数の要素を加えられます。添字が整数の場合は0から振り直されます。
引数に与えた配列が変更されます。戻り値には配列の要素数が返ります。

$ary = array("chair", "desk", "book");
$cnt = array_unshift($ary, "light", "bed");    // =>"light","bed","chair","desk","book"
echo $cnt . "\n";    // => 5

挿入する(array_splice)

array_splice()関数を使います。array_splice(変更する配列, 挿入開始位置, 取り出す数, 挿入する配列)

$ary = array("chair", "desk", "book");
// chairとdeskの間に挿入
$ary2 = array_splice($ary, 1, 0, array("light", "bed"));
// $ary =>"chair","light","bed","desk","book"
// $ary2 => (空)

配列を連結する(array_merge)

array_merge()関数を使います。可変引数なのでいくつもの配列を一度に連結できます。

$ary1 = array("chair", "desk");
$ary2 = array("book");
$ary3 = array("light", "bed");
$ary = array_merge($ary1, $ary2, $ary3);    // =>"chair","desk","book","light","bed"

要素を削除する(unset,array_values)

unset()関数の引数に配列要素を渡します。
ただし要素の添字はそのままなのでarray_valuesを使用して添字を振り直す必要があります。

$ary = array("chair", "desk", "book");
unset($ary[1]);
echo count($ary) . "\n";   // => 2
echo $ary[0] . "\n";   // => "chair"
echo $ary[1] . "\n";   // => 
echo $ary[2] . "\n";   // => "book"

// 添字がそのままなので降り直す
$ary = array_values($ary);
echo $ary[0] . "\n";   // => "chair"
echo $ary[1] . "\n";   // => "book"
echo $ary[2] . "\n";   // => 
echo count($ary) . "\n";   // => 2

すべての要素を削除する(unset)

unset()の引数に配列そのものを渡します。

$ary = array("chair", "desk", "book");
unset($ary);
$cnt = count($ary);    // => 0

重複する要素を削除する(array_unique)

array_unique関数を使用します。

$ary = array("chair", "desk", "book", "desk", "light");
$ary1 = array_unique($ary);    // =>"chair","desk","book","light"

最初の要素を取り出す(array_shift)

array_shift関数を使います。元の配列の添字が整数の場合は0から振り直されます。

$ary = array("chair", "desk", "book");
$value = array_shift($ary);
echo $value . "\n";   // => "chair"
echo count($ary) . "\n";   // => 2

// 添字は振り直される
echo $ary[0] . "\n";   // => "desk"
echo $ary[1] . "\n";   // => "book"
echo $ary[2] . "\n";   // => Undefined offset:2

最後の要素を取り出す(array_pop)

array_pop関数を使います。

$ary = array("chair", "desk", "book");
$value = array_pop($ary);
echo $value . "\n";   // => "book"
echo count($ary) . "\n";   // => 2

// 添字は振り直される
echo $ary[0] . "\n";   // => "chair"
echo $ary[1] . "\n";   // => "desk"
echo $ary[2] . "\n";   // => Undefined offset:2

任意の位置から取り出す(array_splice)

array_splice()関数を使います。array_splice(変更する配列, 取り出し開始位置, 取り出す数)

$ary = array("chair", "desk", "book", "light", "bed");
$ary2 = array_splice($ary, 1, 2);
// $ary =>"chair","light","bed"
// $ary2 =>"desk","book"

要素の一部分をコピーする(array_slice)

array_slice関数を使います。引数によってコピーの仕方が幾つかあります。

$ary = array("chair", "desk", "book", "light", "bed");

ある個所以降をコピーする array_slice(配列, 開始場所)

$ary1 = array_slice($ary, 2);    // =>"book","light","bed"

ある箇所から一定個数をコピーする array_slice(配列, 開始場所, 個数)

$ary2 = array_slice($ary, 1, 2);    // =>"desk","book"

後ろから数えてコピーする array_slice(配列, 開始場所, 個数)

$ary3 = array_slice($ary, -3, 2);    // =>"book","light"

ランダムに要素を取り出す(array_rand)

array_rand関数を使います。戻り値には要素ではなく配列のキーを返します。

$ary = array("chair", "desk", "book", "light", "bed");
srand(time());

$key = array_rand($ary);
echo $ary[$key] . "\n";

複数のキーを取り出す

$keys = array_rand($ary, 2);
foreach($keys as $key){echo $ary[$key] . "\n"; }

配列のすべてのキーを取得する(array_keys)

array_keys関数を使います。

$ary = array("chair" => "wood", "desk" => "iron", "book" => "paper");
$keys = array_keys($ary);    // =>"chair","desk","book"


配列のすべての値を取得する(array_values)

array_values関数を使います。

$ary = array("chair" => "wood", "desk" => "iron", "book" => "paper");
$values = array_values($ary);   // =>"wood","iron","paper"


条件に合う要素を取り出す(array_filter)

array_filter関数を使います。条件となる関数を定義しコールバック関数として渡すことで真となる結果の配列を返します。

function condition($v){
    return ($v<5);
}

$ary = array(2,8,3,4,1,7,9,0);
// array_filter(配列, コールバック)
$result = array_filter($ary, "condition");    // =>2,3,4,1,0

配列を分割する(array_chunk)

array_chunk関数を使用します。戻り値に分割された配列を返します。
分割数が足りない場合、最後の要素は数が少なくなることがあります。

$ary = array("chair", "desk", "book", "light", "bed");
$ary1 = array_chunk($ary, 2);
    // =>"chair","desk"
    // =>"book","light"
    // =>"bed"

要素をランダムに並び替える(shuffle)

shuffle関数を使います。引数に指定した配列が破壊されてしまうので、必要であれば元の配列をコピーしておきます。

$ary = array("chair", "desk", "book", "light");
// 元の配列は取っておく
$ary1 = $ary;
shuffle($ary1);

キーを大文字(小文字)にする(array_change_key_case)

array_change_key_case()関数を使用します。第2引数に大文字か小文字かを指定します。

$ary = array("Chair" => "Wood", "Desk" => "Iron");   // =>("Chair"="Wood"),("Desk"="Iron")

大文字にする

$ary = array_change_key_case($ary, CASE_UPPER);  // =>("CHAIR"="Wood"),("DESK"="Iron")

小文字にする

$ary = array_change_key_case($ary, CASE_LOWER);    // =>("chair"="Wood"),("desk"="Iron")

配列かどうか調べる(is_array)

is_array関数を使用します。

$ary = array("chair" => "wood", "desk" => "iron", "book" => "paper");
$val = 10;
echo is_array($ary) . "\n";    // => true
echo is_array($val) . "\n";    // => false

キーが存在するか調べる

array_ key_ exists関数を使用します。

$ary = array("chair" => "wood", "desk" => "iron", "book" => "paper");
$result = array_key_exists("chair", $ary);    // => true


値が存在するか調べる(in_array)

in_array関数を使用します。

$ary = array("chair" => "wood", "desk" => "iron", "book" => "paper");
echo in_array("iron", $ary) . "\n";    // => true
echo in_array("desk", $ary) . "\n";    // => false キーは関係ない

値が存在するキーを調べる(array_search)

array_search関数を使います。この関数は一番最初に見つけたキーを返します。見つからない場合はFALSEを返します。

$ary = array("chair" => "wood", "desk" => "iron", "book" => "paper", "desk2" => "iron");
$key = array_search("iron", $ary);
echo $key . "\n";    // => desk

値の合計を求める(array_sum)

array_sum()を使います。

$ary = array(1,2,3,4,5,6,7,8,9);
echo array_sum($ary) . "\n";    // => 45

値をソートする(sort,rsort)

sort関数を使うと小さい順に、rsort関数を使うと大きい順にソートされます。

$ary1 = array(2,8,3,4,1,7,9,0);
$ary2 = $ary1;
sort($ary1);    // =>0,1,2,3,4,7,8,9
rsort($ary2);    // =>9,8,7,4,3,2,1,0

キーをソートする(ksort,krsort)

ksort関数を使うと小さい順に、krsort関数を使うと大きい順にソートされます。

$ary1 = array("chair" => "wood", "desk" => "iron", "book" => "paper", "bed" => "wood");
$ary2 = $ary1;
ksort($ary1);    // =>("bed"="wood"),("book"="paper"),("chair"="wood"),("desk"="iron")
krsort($ary2);    // =>("desk"="iron"),("chair"="wood"),("book"="paper"),("bed"="wood")

ユーザー定義のソートをする(usort)

usort関数を使います。比較関数は以下のような規約に基づきます。
第一引数 < 第二引数 =< -1
第一引数 = 第二引数 =< 0
第一引数 > 第二引数 =< 1
配列の添字は削除され再度振り直されます。

function cmpare($a, $b){
    if($a==$b) return 0;
    return ($a<$b) ? -1 : 1;
}
$ary = array(2,8,3,4,1,2,7,9,0);
usort($ary, "cmpare");    // =>0,1,2,2,3,4,7,8,9

任意文字区切りで文字列出力する(implode)

implode関数を使います。

$ary = array("chair", "desk", "book");   // => "chair","desk","book"
// スペース区切りで出力
$str = implode(' ', $ary);
echo $str . "\n";    // => chair desk book