2012-10-13 8 views
5

Mam duży array symboli giełdowych, ponieważ jestem za projektem pisania internetowej symulacji giełdowej. Jedną z moich funkcji pomocniczych jest określanie, czy wprowadzony towar jest ważny, sprawdzając tablicę dla symbolu. Aby to zrobić, używam array_search(). Problem, który mam, polega na sprawdzaniu przypadków krawędzi. Wygląda na to, że wyszukiwanie nie podnosi elementu zerowego, mimo że podnosi on zupełnie inne elementy. Oto część tablicy:array_search() nie znajduje 0 elementu

[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 

Itp, itd Jak wcześniej powiedziałem, to działa dobrze dla innych elementów, po prostu nie 0-ga jeden. Zwraca FALSE podczas wyszukiwania AAC.

Oto kod PHP, którego używam.

<?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. można zmienić poprzez edycję akcji ciąg zapytania w adresie URL. Tak jak powiedziałem, ?stock=AAC zwraca wartość false, a wartość taka jak ?stock=GOOG jest prawdziwa. Dzięki za pomoc!

Odpowiedz

14

array_search() zwraca klucz pierwszego dopasowania, jeśli został znaleziony. Kiedy ten klucz ma wartość 0, a ty rzucasz go w funkcję bool, stanie się on fałszywy.

Co chcesz zrobić, to porównać do false pomocą 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! 
} 
+0

Ahhh! Widzę, co zrobiłem. Całkowicie zapomniałem, że zwraca indeks, w przeciwieństwie do funkcji isFound(). Dziękuję bardzo! – Saxophlutist

0

Sprawdziłem swój kod i znalazłem jeden problem jest w tym wierszu

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

jesteś rzucając go do bool i dlatego nic nie zwraca na 0 element.

jego działający przykład: http://codepad.viper-7.com/VPveZH

Powiązane problemy