LoginSignup
1
1

More than 3 years have passed since last update.

Why PHP Array!?!? バグを生みそうなPHPの配列の仕様

Last updated at Posted at 2020-01-08

すべてが1になる

<?php
$array = array(
    1    => "a",
    "1"  => "b",
    1.5  => "c",
    true => "d",
);
var_dump($array);
?>

この結果ってなんになると思います?

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

Why PHP Array!?
なんでこうなるの!?
どうやら「1」「"1"」「1.5」「true」は、すべて「1」と見なされるみたい。
結局の所

<?php
$array = array(
    1  => "a",
    1  => "b",
    1  => "c",
    1  => "d",
);
var_dump($array);
?>

ってことらしい。
まぁ1==trueは成り立つしね、まぁまぁ。
「1.5」は意味わからんけど。

マイナス思考

<?php
$array = array(
    100   => -100,
    -100  => 100,
);
var_dump($array);
?>

この結果ってなんになると思います?

array(2) {
  [100]=>
  int(-100)
  [-100]=>
  int(100)
}

Why PHP Array!?!?
これはキッチリわかれるんかい!?!?
じゃぁさっきの「1.5」もキーとして認めてあげて!!

はい順番にならんで~

<?php
$array = array(
         "a",
         "b",
    6 => "c",
         "d",
);
var_dump($array);
?>

この結果ってなんになると思います?

array(4) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [6]=>
  string(1) "c"
  [7]=>
  string(1) "d"
}

Why PHP Array!?!?!?
そこに並ぶの!?!?!?
2になると思ったよ…
キーの指定がない場合は、最後のキーを参照して格納するみたい。

俺はオンリーワンだから


<?php
$array = array(
           "a",
           "b",
    'X' => "c",
           "d",
);
var_dump($array);
?>

この結果ってなんになると思います?

array(4) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  ['X']=>
  string(1) "c"
  [2]=>
  string(1) "d"
}

Why PHP Array!?!?!?!?
「'X'」の次は「'Y'」じゃないの!?!?!?!?
あくまでキーの整数値を参照ということみたい。

ゴーストインザシェル

$array = array(1, 2, 3, 4, 5);

foreach ($array as $i => $value) {
    unset($array[$i]);
}

$array[] = 6;
print_r($array);

この結果ってなんになると思います?

array(1) {
  [5]=>
  int(6)
}

Why PHP Array!?!?!?!?!?
unset()で消したはずじゃ!?!?!?!?!?!?
彼らのゴーストはまだ消えていないんだね…。

まとめ

PHPの配列って癖が強い気がする…。
他の言語ってどうなんだろう?

1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1