概要
以下の関数は、配列の先頭・末尾に要素を追加し、要素を抜き出す。これらの関数は元の配列を変更する。
unshift()
は配列の先頭に要素を追加し、要素数を返す
shift()
は配列の先頭から要素を1つ抜き出す
push()
は配列の末尾に要素を追加し、要素数を返す
pop()
は配列の末尾から要素を1つ抜き出す
ただし連想配列については、これらの関数がうまく機能しない、臨んだ値を返さないということがあり、別の処理が必要。
非破壊的に先頭・末尾の要素を取り出す方法はこちら。
配列
unshift()/shift()~先頭要素の追加・抜き出し
unshift()
は配列の先頭に要素を追加し、追加後の配列の要素数を返す。追加後の配列は変更される。追加する要素は複数指定加可能。
unshift($array, $value[, $value ...]) : $size
shift()
は配列の先頭から要素を1つ抜き出して返す。抜き出した後の配列は変更される。
shift($array) : $value
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
$ary = ['two', 'three', 'four']; $size = array_unshift($ary, 'zero', 'one'); echo '<pre>'; echo $size, "\n", print_r($ary, true), "\n"; // 5 // Array // ( // [0] => zero // [1] => one // [2] => two // [3] => three // [4] => four // ) $val = array_shift($ary); echo $val, "\n", print_r($ary, true), "\n"; echo '</pre>'; // zero // Array // ( // [0] => one // [1] => two // [2] => three // [3] => four // ) |
push()/pop()~末尾要素の追加・抜き出し
push()
は配列の先頭に要素を追加し、追加後の配列の要素数を返す。追加後の配列は変更される。追加する要素は複数指定加可能。
push($array, $value[, $value ...]) : $size
pop()
は配列の先頭から要素を1つ抜き出して返す。抜き出した後の配列は変更される。
pops($array) : $value
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
$ary = ['two', 'three', 'four']; $size = array_push($ary, 'five', 'six'); echo '<pre>'; echo $size, "\n", print_r($ary, true), "\n"; // 5 // Array // ( // [0] => two // [1] => three // [2] => four // [3] => five // [4] => six // ) $val = array_pop($ary); echo $val, "\n", print_r($ary), "\n"; echo '</pre>'; // six // Array // ( // [0] => two // [1] => three // [2] => four // [3] => five // ) |
連想配列
unshift()/push()はよくない
連想配列への追加は、要素としてではなく配列として追加されてしまう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
$ary = ['two' => 2, 'three' => 3, 'four' => 4]; array_unshift($ary, ['one' => 1]); array_push($ary, ['five' => 5]); echo '<pre>'; echo print_r($ary, true), "\n"; echo '</pre>'; // Array // ( // [0] => Array // ( // [one] => 1 // ) // // [two] => 2 // [three] => 3 // [four] => 4 // [1] => Array // ( // [five] => 5 // ) // // ) |
shift()/pop()は値だけ返る
キーの取得が必要ない場合は、これらを使える。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
$ary = ['one' => 1, 'two' => 2, 'three' => 3, 'four' => 4]; echo '<pre>'; echo array_shift($ary), "\n", print_r($ary, true), "\n"; // 1 // Array // ( // [two] => 2 // [three] => 3 // [four] => 4 // ) echo array_pop($ary), "\n", print_r($ary, true), "\n"; echo '</pre>'; // 4 // Array // ( // [two] => 2 // [three] => 3 // ) |
結合演算子’+’は使える
配列の結合演算子を使えば、先頭・末尾への追加が素直にできる。
|
$ary = ['two' => 2, 'three' => 3, 'four' => 4]; $ary = ['one' => 1] + $ary + ['five' => 5]; echo '<pre>'; echo print_r($ary, true), "\n"; echo '</pre>'; // Array // ( // [one] => 1 // [two] => 2 // [three] => 3 // [four] => 4 // [five] => 5 // ) |
array_slice()とunset()による書き方
連想配列のキー・値のセットで取り出したい場合に、array_slice()
で先頭や末尾要素を取り出し、そのキーを使ってunset()
する方法。reset()
やend()
でもよい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
$ary = ['one' => 1, 'two' => 2, 'three' => 3, 'four' => 4, 'five' => 5]; $head = array_slice($ary, 0, 1); unset($ary[key($head)]); $tail = array_slice($ary, count($ary) - 1, 1); unset($ary[key($tail)]); echo '<pre>'; echo print_r($head, true), "\n"; // Array // ( // [one] => 1 // ) echo print_r($tail, true), "\n"; // Array // ( // [five] => 5 // ) echo print_r($ary, true), "\n"; echo '</pre>'; // Array // ( // [two] => 2 // [three] => 3 // [four] => 4 // ) |