2009-02-17 94 views
9

Tôi có một mảng:Cách tìm chuỗi trong một mảng bằng PHP?

$array = array("apple", "banana", "cap", "dog", etc..) up to 80 values. 

và một biến chuỗi:

$str = "abc"; 

Nếu tôi muốn kiểm tra xem chuỗi này ($str) tồn tại trong mảng hay không, tôi sử dụng preg_match chức năng, như sau:

$isExists = preg_match("/$str/", $array); 

if ($isExists) { 
    echo "It exists"; 
} else { 
    echo "It does not exist"; 
} 

Đây có phải là cách chính xác không? Nếu mảng phát triển lớn hơn, nó sẽ rất chậm? Có phương pháp nào khác không? Tôi đang cố gắng thu nhỏ lưu lượng truy cập cơ sở dữ liệu của mình.

Và nếu tôi có hai hoặc nhiều chuỗi để so sánh, tôi có thể làm như thế nào?

+0

thể sử dụng hai chức năng in_array() và array_search() plaese xem hướng dẫn chuẩn bị bởi tôi http://braincybersolutions.com/php-tutorial/php-search-in-array/ – syam

Trả lời

6

Nếu bạn chỉ cần một kết hợp chính xác, sử dụng in_array ($ str, $ mảng) - nó sẽ nhanh hơn.

Một cách tiếp cận khác là sử dụng mảng kết hợp với các chuỗi của bạn làm khóa, nhanh hơn logarithmically. Tuy nhiên, bạn sẽ thấy sự khác biệt rất lớn giữa phương pháp đó và phương pháp tìm kiếm tuyến tính chỉ với 80 phần tử.

Nếu bạn làm cần khớp mẫu, thì bạn sẽ cần phải lặp qua các phần tử mảng để sử dụng preg_match.


Bạn đã chỉnh sửa câu hỏi để hỏi "điều gì sẽ xảy ra nếu bạn muốn kiểm tra nhiều chuỗi?" - bạn sẽ cần phải lặp lại các chuỗi đó, nhưng bạn có thể dừng ngay khi bạn không nhận được kết quả phù hợp ...

$find=array("foo", "bar"); 
$found=count($find)>0; //ensure found is initialised as false when no terms 
foreach($find as $term) 
{ 
    if(!in_array($term, $array)) 
    { 
     $found=false; 
     break; 
    } 
} 
4

preg_match dự kiến ​​đầu vào chuỗi không phải là mảng. Nếu bạn sử dụng phương pháp bạn mô tả bạn sẽ nhận được:

Cảnh báo: preg_match() dự kiến ​​tham số 2 là chuỗi, mảng được đưa ra trong LOCATION vào dòng X

Bạn muốn in_array:

if (in_array ($str , $array)) { 
    echo 'It exists'; 
} else { 
    echo 'Does not exist'; 
} 
+0

Nếu tôi có 2 chuỗi, làm thế nào để phù hợp trong một mảng ??? – roa3

+0

chuỗi như thế này $ var "id1; id2"; – roa3

+0

Câu trả lời của Paul Dixon ở trên trả lời câu hỏi này khá tốt. – zi3guw

2

Nếu bạn có nhiều hơn một giá trị mà bạn có thể hoặc là kiểm tra tất cả các giá trị separatly:

if (in_array($str1, $array) && in_array($str2, $array) && in_array($str3, $array) /* … */) { 
    // every string is element of the array 
    // replace AND operator (`&&`) by OR operator (`||`) to check 
    // if at least one of the strings is element of the array 
} 

Hoặc bạn có thể làm một intersection của cả chuỗi và mảng:

$strings = array($str1, $str2, $str3, /* … */); 
if (count(array_intersect($strings, $array)) == count($strings)) { 
    // every string is element of the array 
    // remove "== count($strings)" to check if at least one of the strings is element 
    // of the array 
} 
0

Chức năng in_array() chỉ phát hiện mục hoàn chỉnh nếu một phần tử mảng. Nếu bạn muốn phát hiện một phần chuỗi trong một mảng, mỗi phần tử phải được kiểm tra.

foreach ($array AS $this_string) { 
    if (preg_match("/(!)/", $this_string)) { 
    echo "It exists"; 
    } 
} 
Các vấn đề liên quan