最近、自分のコードで array_search 関数を使用しているときに問題があることに気付きました。配列「$allcraftatts」で値「sharp」を検索しています。2行の実験を設定して問題を切り分けようとしました:
$testcopy=$allcraftatts;
$testsharp=array_search("sharp", $testcopy);
「print_r(get_defined_vars());」の使用 後で、次の結果が得られます。
[testcopy] => Array
(
[0] => 0
[1] => 0
[2] => 0
[3] => 0
[4] => 0
[5] => 0
[6] => Sharp Stone
[7] => Sharp Stones
[8] => stone
[9] => object
[10] => sharp
[11] => hard
[12] => 0
[13] => 0
[14] => 0
[15] => 0
[16] => 0
[17] => 0
[18] => 0
)
[testsharp] => 0
これらの変数を変更しないように注意しました。
さて、コードを次のように変更すると
$testcopy=$allcraftatts;
unset($testcopy[0]);
$testsharp=array_search("sharp", $testcopy);
「1」を返します。
これにより、常に配列の最初のキーが返されると思います。
それは私を困惑させます!これは、言語自体に問題があるのではないかと心配させるバグの 1 つです。これがいかに疑わしいものであったとしても、私は最終的に PHP のソースに何か問題があるかどうかを確認するように駆り立てられましたが、残念ながらそれを理解することはできませんでした。
このように単純な関数である以上、必然的に単純な答えに完全に屈辱を感じるでしょうが、この時点では答えが欲しいだけです。