2012-10-13 9 views
5

私は株価シミュレーションwebappを書くプロジェクトのため、株価記号の大きいarrayを持っています。私のヘルパー関数の1つは、シンボルの配列をチェックすることによって、入力された在庫が有効かどうかを判断するものです。これを行うには、array_search()を使用しています。 私が持っている問題は、エッジケースをチェックすることです。他の要素を完全にうまく拾っても、検索では0番目の要素が取り出されていないようです。ここで は、アレイの一部である: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番目の1だけで、他の要素のため正常に動作し、前に述べました。 AACを検索するときはFALSEを返します。

ここに私が使用している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>'); 
       } 
      ?> 

Here is the test web page I'm using. あなたは、URLのクエリ文字列を編集して株式を変更することができます。 私が言ったように、?stock=AACは偽を返しますが、?stock=GOOGのようなものは真です。 助けてくれてありがとう!

答えて

14

array_search()は、最初に一致するものが見つかった場合はそのキーを返します。そのキーが0で、それをブールにキャストすると、それは偽になります。

やりたいことnot identical operator ===を使用してfalseと比較されます。

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

if ($index !== false) 
{ 
    // found! 
} 
+0

Ahhh!私は何をしたのか分かります。関数のisFound()ソートとは対照的に、インデックスを返すことを完全に忘れてしまいました。どうもありがとう! – Saxophlutist

0

私はあなたのコードをチェックし、私は1つの問題は、あなたがそれをキャストしている。このラインで

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

で見つかりましたこのため、0番目の要素に対しては何も返しません。

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

関連する問題