$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()されて台無しだ。

PHP: array_shift – Manual

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

一件落着。さて殴りにいこうか。

カテゴリー: PHP

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です