2012-10-13 38 views
5

Tôi có một biểu tượng lớn array của mã cổ phiếu, như tôi đang viết một dự án mô phỏng thị trường chứng khoán webapp. Một trong những chức năng trợ giúp của tôi là một trong những để xác định xem cổ phiếu đã nhập có hợp lệ hay không bằng cách kiểm tra mảng cho biểu tượng. Để thực hiện việc này, tôi đang sử dụng array_search(). Vấn đề tôi gặp phải là do kiểm tra các trường hợp cạnh. Dường như tìm kiếm không chọn phần tử thứ 0, mặc dù nó chọn các phần tử khác hoàn toàn tốt. Dưới đây là một phần của mảng:array_search() không tìm phần tử thứ 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 

Etc vv Như đã nói trước đây, nó hoạt động tốt cho các yếu tố khác, chỉ cần không phải là một 0. Nó trả về FALSE khi tìm kiếm AAC.

Đây là mã PHP tôi đang sử dụng.

<?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. Bạn có thể thay đổi các cổ phiếu bằng cách chỉnh sửa các chuỗi truy vấn trong url. Như tôi đã nói, ?stock=AAC trả về false, trong khi một cái gì đó như ?stock=GOOG là đúng. Cảm ơn bạn đã giúp đỡ!

Trả lời

14

array_search() trả về khóa của trận đấu đầu tiên nếu tìm thấy. Khi phím được nói là 0 và bạn đặt nó thành một bool, nó sẽ trở thành sai.

Những gì bạn muốn làm là so sánh nó với false sử dụng 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! Tôi thấy những gì tôi đã làm. Tôi hoàn toàn quên rằng nó trả về chỉ mục, trái ngược với một loại hàm isFound(). Cảm ơn rất nhiều! – Saxophlutist

0

Tôi đã kiểm tra mã của bạn và tôi tìm thấy một vấn đề là ở dòng này

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

bạn đang đúc nó để bool và vì điều này nó trả về không có gì cho phần tử thứ 0.

ví dụ làm việc của nó http://codepad.viper-7.com/VPveZH

Các vấn đề liên quan