Posted at

【備忘録】range()、suffle()、array_slice()理解する


目的

イメージできるようになる


range関数

startからendまでの整数の配列を返す。要するに、配列を作る

<?php

// array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
foreach (range(0, 12) as $number) {
echo $number;
}


shuffle関数

配列の要素に対して、新しいキーを割り当てる。パラメーターは、配列のみ。

<?php

//1~20の数字を$numbersに代入する。
$numbers = range(1, 20);
//
shuffle($numbers);
foreach ($numbers as $number) {
echo "$number ";
}
?>


array_slice関数

こいつが1番分かりづらい。

パラメーターには、array、offset,length,preserve_keysがある。

array→配列

offset→基準点からの距離で位置を表現したもの

length→返す要素の数を指定するが、負の場合は、最後の要素からの基準点になる。(ややこい)

preserve_keys→


例1

<?php

$input = array("a", "b", "c", "d", "e");

$output = array_slice($input, 2);
var_dump($output);
?>



例1の出力

array(3) { [0]=> string(1) "c" [1]=> string(1) "d" [2]=> string(1) "e" }


c,d,eの値を配列で取得している

最初の要素から数えて3番目の値からスタートし、最後の要素まで取得する


例2

<?php

$input = array("a", "b", "c", "d", "e");

$output = array_slice($input, -2);
var_dump($output);
?>



例2の出力

array(2) { [0]=> string(1) "d" [1]=> string(1) "e" }


-2にすると、d,eの値を配列で取得している。

最後の要素から数えて2番目の値からスタートし、最後の要素まで取得する


例3

<?php

$input = array("a", "b", "c", "d", "e");

$output = array_slice($input, 2,2);
var_dump($output);
?>



例3の出力

array(2) { [0]=> string(1) "c" [1]=> string(1) "d" }


c,dの値を配列で取得している。

最初の要素から数えて3番目の値からスタートし、要素数が2になるまで取得できる。


例4lengthが負の場合は、配列の末尾から連続する複数の要素が返されます。

<?php

$input = array("a", "b", "c", "d", "e", "f");

$output = array_slice($input, 1, -2);
var_dump($output);
?>



例4の出力

array(3) { [0]=> string(1) "b" [1]=> string(1) "c" [2]=> string(1) "d" }


b,c,dの値を出力している

最初から数えて2番目の値と、最後から数えて3番目の値の間を配列で取得する。


例4preserve_keysをtrue

<?php

$input = array("a", "b", "c", "d", "e", "f");

$output = array_slice($input, 2, -1, true);

var_dump($output);
?>



例4の出力

array(3) { [2]=> string(1) "c" [3]=> string(1) "d" [4]=> string(1) "e" }


値に当てはまる添字が、2から始まる

offsetで指定した数が最初の要素の添字になるようだ


まとめ

random関数は配列を作り、shuffle関数は配列しか受けとらない点から相性の良さを感じる。

array_sliceも配列しか受け取らない。そして、様々な条件(offset,length,preserve_keys)をつけることで取得する際に制限をかけることができる


参考資料・引用先

PHP公式ドキュメント

shuffle

range

array_slice