Trước hết, nếu bạn có nghĩa là chỉ làm hàng chục mỗi phút, sau đó tôi sẽ không lo lắng khủng khiếp về hiệu suất trong trường hợp này. Những trận đấu này là khá nhanh, và tôi không nghĩ rằng bạn sẽ có một vấn đề hiệu suất bằng cách lặp qua mảng mô hình của bạn và gọi preg_match riêng như thế này:
$matches = false;
foreach ($pattern_array as $pattern)
{
if (preg_match($pattern, $page))
{
$matches = true;
}
}
Bạn thực sự có thể kết hợp tất cả các mô hình thành một sử dụng toán tử or
giống như một số người đang đề xuất, nhưng đừng chỉ tát chúng cùng với một số |
. Điều này sẽ phá vỡ nặng nếu bất kỳ mẫu nào của bạn chứa hoặc toán tử.
Tôi muốn giới thiệu ít nhất nhóm mẫu bằng cách sử dụng dấu ngoặc đơn như:
foreach ($patterns as $pattern)
{
$grouped_patterns[] = "(" . $pattern . ")";
}
$master_pattern = implode($grouped_patterns, "|");
Nhưng ... Tôi không thực sự chắc chắn nếu điều này kết thúc lên được nhanh hơn. Một cái gì đó phải lặp qua chúng, cho dù đó là preg_match hoặc PHP. Nếu tôi phải đoán tôi đoán rằng các trận đấu cá nhân sẽ gần như nhanh và dễ đọc và duy trì hơn.
Cuối cùng, nếu hiệu suất là những gì bạn đang tìm kiếm ở đây, tôi nghĩ điều quan trọng nhất cần làm là kéo các đối sánh không phải regex vào một kiểm tra "chuỗi chứa" đơn giản. Tôi sẽ tưởng tượng rằng một số kiểm tra của bạn phải được kiểm tra chuỗi đơn giản như tìm cách để xem nếu "Trang web này được đóng" là trên trang.
Vì vậy, làm điều này:
foreach ($strings_to_match as $string_to_match)
{
if (strpos($page, $string_to_match) !== false))
{
// etc.
break;
}
}
foreach ($pattern_array as $pattern)
{
if (preg_match($pattern, $page))
{
// etc.
break;
}
}
và tránh càng nhiều càng tốt preg_match()
có lẽ sẽ được tăng tốt nhất của bạn. strpos()
là lô nhanh hơn preg_match()
.
Vì lợi ích của nhân viên Google, hãy cân nhắc sử dụng ngắt (http://www.php.net/manual/en/control-structures.break.php) để thoát khỏi vòng lặp foreach khi bạn đã tìm thấy kết quả phù hợp! –
Tôi tin rằng điều này nên là: foreach ($ pattern_array là $ pattern), ít nhất là trong phiên bản PHP của tôi – hellomynameisjoel
Được rồi các bạn ... đã chỉnh sửa để giải quyết các nhận xét của bạn. – danieltalsky