5

私は株式市場シミュレーションWebアプリを作成しているプロジェクトのために、大量arrayの株式ティッカーシンボルを持っています。私のヘルパー関数の1つは、シンボルの配列をチェックすることによって、入力された株が有効かどうかを判断することです。これを行うために、私はを使用していarray_search()ます。私が抱えている問題は、エッジケースをチェックすることです。他の要素は完全に正常に検出されますが、検索では0番目の要素が検出されていないようです。配列の一部は次のとおりです。

[0] => AAC
[1] => AACC
[2] => AACOU
[3] => AACOW
[4] => AAIT
[5] => AAME
[6] => AAON
[7] => AAPL
[8] => AAWW
[9] => AAXJ
[10] => ABAX
[11] => ABCB
[12] => ABCD
[13] => ABCO
[14] => ABFS
[15] => ABIO
[16] => ABMD
[17] => ABTL
[18] => ABVA
[19] => ACAD
[20] => ACAS
[21] => ACAT
[22] => ACCL

などなど。前に述べたように、0番目の要素だけでなく、他の要素でも問題なく機能します。FALSEAACを検索すると戻ります。

これが私が使用しているPHPコードです。

<?php   
                if(isset($_GET[stock])) {
                    $ticker = $_GET[stock];
                    $ticker = trim($ticker);
                    print("<pre>Ticker is $ticker</pre>");

                    print("Validity: " .        Stock::isValidStock($ticker));

                    print('<pre>');
                    $stock = Stock::getStockList();
                    print_r($stock);
                    print((bool)array_search('AAC', $stock));
                    print('</pre></br>');
                }
            ?>

これが私が使用しているテストWebページです。 URLのクエリ文字列を編集して、ストックを変更できます。私が言ったように、 ?stock=AACfalseを返しますが、のようなもの?stock=GOOGはtrueです。助けてくれてありがとう!

4

2 に答える 2

17

array_search() returns the key of the first match if one is found. When said key is 0 and you cast it into a bool, it will become false.

What you want to do is compare it to false using the not identical operator === :

//if you don't need the index you can skip assigning it to a variable
$index = array_search('AAC', $stock); 

if ($index !== false) 
{
    // found!
}
于 2012-10-13T06:57:19.237 に答える
0

コードを確認したところ、この行に1つの問題があることがわかりました

 print((bool)array_search('AAC', $stock));

これをboolにキャストしているため、0番目の要素には何も返されません。

その実例http://codepad.viper-7.com/VPveZH

于 2012-10-13T07:00:48.987 に答える