2012-10-13 99 views
5

我有一個大的股票代碼符號array,因爲我是一個編寫股票市場模擬webapp的項目。我的一個幫手功能是通過檢查符號的數組來確定輸入的庫存是否有效。爲此,我正在使用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之一。搜索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返回false,而類似?stock=GOOG是真實的。 感謝您的幫助!

回答

14

array_search()返回第一個匹配的密鑰,如果找到一個。當所述鍵是0並且你將它投入到布爾中時,它將變成假。

你想要做的是使用它比較falsenot 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! 
} 
+0

啊!我明白我的所作所爲。我完全忘了它返回索引,而不是一個isFound()類型的函數。非常感謝! – Saxophlutist

0

我檢查你的代碼,我發現一個問題,就是在這一行

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

你是它鑄造布爾,並因此它沒有返回任何零元素。

其工作示例http://codepad.viper-7.com/VPveZH