2012-10-13 92 views
5

Tengo un gran array de símbolos de cotización de acciones, ya que estoy para un proyecto que escribe una aplicación de simulación de mercado de valores. Una de mis funciones auxiliares es una para determinar si el stock ingresado es válido al verificar el arreglo para el símbolo. Para hacer esto, estoy usando array_search(). El problema que tengo es uno al verificar casos de borde. Parece que la búsqueda no está recogiendo el elemento 0, a pesar de que capta otros elementos completamente bien. aquí es parte de la matriz:array_search() no encontrando el 0º elemento

[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 

etc, etc. Como se ha dicho antes, que funciona bien para otros elementos, simplemente no la 0 ª. Devuelve FALSE al buscar AAC.

Aquí está el código PHP que estoy usando.

<?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. Usted puede cambiar la acción mediante la edición de la cadena de consulta en la URL. Como dije, ?stock=AAC devuelve falso, mientras que algo como ?stock=GOOG es verdadero. ¡Gracias por cualquier ayuda!

Respuesta

14

array_search() devuelve la clave del primer partido si uno se encuentra. Cuando dicha clave es 0 y la conviertes en un bool, se convertirá en falsa.

Lo que se quiere hacer es compararlo con false utilizando el 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! Veo lo que hice. Olvidé por completo que devuelve el índice, a diferencia de un tipo de función isFound(). ¡Muchas gracias! – Saxophlutist

0

revisar su código y me encontré con un problema es en esta línea

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

que está echando a bool y debido a esto no devuelve nada para el 0 ° elemento.

su ejemplo de trabajo http://codepad.viper-7.com/VPveZH

Cuestiones relacionadas