tôi có xu hướng sử dụng strpos
$needle='appy';
$haystack='I\'m feeling flappy, and you?';
if(strpos($haystack,$needle)!==false){
//then it was found
}
Nếu bạn muốn nó bỏ qua trường hợp, sử dụng stripos.
Lưu ý rằng sự tinh tế về điều này là nếu kim ở ngay đầu của haystack, ở vị trí 0, số nguyên 0 được trả về. Điều này có nghĩa là bạn phải so sánh với false
, sử dụng so sánh nghiêm ngặt hoặc có thể tạo ra giá trị âm sai.
Như đã trình bày trong cuốn hướng dẫn, liên kết ở trên
Warning
Chức năng này có thể trở lại Boolean FALSE, nhưng cũng có thể trả về một giá trị không Boolean mà đánh giá để FALSE, chẳng hạn như 0 hoặc là "". Vui lòng đọc phần trên Booleans để biết thêm thông tin . Sử dụng toán tử === cho kiểm tra giá trị trả về của hàm này.
Theo như sử dụng mảng, strpos có nghĩa là để có hai chuỗi. Sử dụng một mảng sẽ tạo ra Warning: strpos() expects parameter 1 to be string, array given
hoặc 1Cảnh báo: strpos(): kim không phải là một chuỗi hoặc số nguyên`.
Được rồi, giả sử bạn có một chuỗi các chuỗi để tìm kiếm.
Bạn có thể
$needles=array('hose','fribb','pancake');
$haystack='Where are those pancakes??';
foreach($needles as $ndl){
if(strpos($haystack,$ndl)!==false){ echo "'$ndl': found<br>\n"; }
else{ echo "'$ndl' : not found<br>\n"; }
}
Một cách khác để tìm kiếm nhiều chuỗi trong một chuỗi, mà không sử dụng một mảng ... Đây chỉ cho bạn biết ít nhất một trận đấu đã được tìm thấy.
$haystack='Where are those pancakes??';
$match=preg_match('#(hose|fribb|pancake)#',$haystack);
//$match is now int(1)
Hoặc sử dụng preg_match_all để xem có bao nhiêu kết quả phù hợp.
$all_matches=preg_match_all('#(hose|fribb|pancake)#',$haystack,$results);
//all_matches is int(2). Note you also have $results, which stores which needles matched.
Trong đó, cụm từ tìm kiếm là cụm từ thông dụng. ()
nhóm các cụm từ lại với nhau và |
có nghĩa là 'hoặc'. #
biểu thị điểm bắt đầu và kết thúc của mẫu. Regexes có thể trở nên khá phức tạp một cách nhanh chóng, nhưng tất nhiên, chúng hoạt động! Chúng thường được tránh vì lý do hiệu suất, nhưng nếu bạn đang thử nghiệm nhiều chuỗi, điều này có thể hiệu quả hơn so với phương thức lặp mảng được mô tả ở trên. Tôi chắc chắn cũng có những cách khác để làm điều này.
Ok, tốt. Nhưng nếu nó ở trong một mảng thì sao? (kiểm tra bài đăng đã chỉnh sửa). – MacMac
Bạn có nghĩa là haystack là một mảng? Hay kim? Kiểm tra các tài liệu PHP - bình luận đầu tiên hiện là 'strpos chấp nhận một mảng cho $ kim' – JAL
Về cơ bản bạn sẽ phải sử dụng foreach để lặp qua mảng, tùy theo cái nào. preg_match là một giải pháp khả thi nếu bạn có nhiều 'kim' và một 'haystack'. – JAL