1

そのため、Google の製品フィードを作成しているときに、php で通知を受けていました。その通知は、「本日、 _サイトで次の php 通知が 4989 回発生しました: PHP 通知: 未定義のインデックス: 583 行目の /xxx/Status.php の 0」 でした。

これはそのクラスのコードでした

public function inStockLocally($productcode)
{
    if($this->_status[$productcode]['status'] == self::IN_STOCK) {
        return $this->_status[$productcode]['in_stock_local'];
    }
    return false;
}

関数は $productcode = 0 を取得していましたが、productcode は実際には 'w32' であったため、キーは存在しませんでした。

関数が呼び出されていたスタックの上に、面倒な製品を壊すためにこれを入れました。

    if ($productcode == 0) {
        $test = 'breakhere';
    }

netbeans と firebug を使用すると、$productcode = 'w32' のときに行が壊れました

私の質問は、なぜ 'w32' == 0 が true と評価されるのですか? また、「h94」などの他の同様の構造コードでも true と評価されます。

部門の誰もこれが起こっている理由を理解できないので、助けていただければ幸いです。

qに十分な情報を入れていなかったと思います。2つのことが起こっています。1. 'w32' が何らかの理由で数値 = 0 に変換されました。2. プロダクトコードの構造が「x##」の場合、[0] が配列のキーとして挿入されます。

4

2 に答える 2

-1

「数値を文字列と比較する場合、または比較に数値文字列が含まれる場合、各文字列は数値に変換され、数値として比較が実行されます。」

http://php.net/manual/en/language.operators.comparison.php

さらに、連想配列であると予想されますが、インデックス付き配列があると思います。

array() 関数は、配列を作成するために使用されます。

PHP には、次の 3 種類の配列があります。

インデックス付き配列 - 数値インデックスを持つ配列 連想配列 - 名前付きキーを持つ配列 多次元配列 - 1 つ以上の配列を含む配列 構文 インデックス付き配列の構文:

配列 (値 1、値 2、値 3 など);

連想配列の構文:

配列(キー=>値、キー=>値、キー=>値など);

于 2013-09-27T22:18:27.000 に答える