2012-10-13 98 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