$a = array(); $a[5] = "5 banme"; $a[4] = "4 banme"; $a[0] = "0 banme"; $a[1] = "1 banme"; $a[2] = "2 banme"; print_r($a); print(array_shift($a));
そもそもこういうデータを作ったやつを殴るのが先ではあるけど、諸事情あんだよ。現実は色々と散らかってて汚いものなんだ。
で、まあ、察しついたかも知んないけど、結果は、
Array ( [5] => 5 banme [4] => 4 banme [0] => 0 banme [1] => 1 banme [2] => 2 banme ) 5 banme
というわけで、一番最初に突っ込んだ奴が先頭なんだな。この場合には、配列をこさえた際のインデックス番号にはなんの意味もない。意味ないどころかreset()されて台無しだ。
mixed array_shift ( array &$array )array_shift() は、array の最初の値を取り出して返します。配列 array は、要素一つ分だけ短くなり、全ての要素は前にずれます。 数値添字の配列のキーはゼロから順に新たに振りなおされますが、 リテラルのキーはそのままになります。
なので、
$a = array(); $a[5] = "5 banme"; $a[4] = "4 banme"; $a[0] = "0 banme"; $a[1] = "1 banme"; $a[2] = "2 banme"; sort($a); print_r($a); print(array_shift($a));
こうしてsort()いれてみる
Array ( [0] => 0 banme [1] => 1 banme [2] => 2 banme [3] => 4 banme [4] => 5 banme ) 0 banme
納得するであろう形になった。インデックス番号だと思ってたけど添字なんだなコレ。
いやーよかった。
* * * + うそです n ∧_∧ n + (ヨ(* ´∀`)E) Y Y *
うそなんだなー
$a = array(); $a[5] = "AAAAA"; $a[4] = "BBBBB"; $a[0] = "CCCCC"; $a[1] = "DDDDD"; $a[2] = "EEEEE"; sort($a); print_r($a); print(array_shift($a));
インデックスの番号と中身を組み替えた図。
Array ( [0] => AAAAA [1] => BBBBB [2] => CCCCC [3] => DDDDD [4] => EEEEE ) AAAAA
AAAAAは$a[5]だったはずの中身です。
中身でソートしちゃうよねー
こういうときはksort()をつかうんでした。
$a = array(); $a[5] = "AAAAA"; $a[4] = "BBBBB"; $a[0] = "CCCCC"; $a[1] = "DDDDD"; $a[2] = "EEEEE"; ksort($a); print_r($a); print(array_shift($a));
これで、
Array ( [0] => CCCCC [1] => DDDDD [2] => EEEEE [4] => BBBBB [5] => AAAAA ) CCCCC
一件落着。さて殴りにいこうか。