2015-11-17 2 views
2

Моя проблема в том, что у меня огромный массив. В этом массиве находятся Браузер, пользователь, используемый для доступа на мой сайт, а также боты и пауки.Laravel Framework - Как я могу найти определенную строку в массиве?

Это выглядит так: Mozilla, Mozilla, Mozillabot, Mozilla, Unicornbot и так далее.

Мне нужно получить каждый ключ в моем массиве, в котором есть «бот», как mozillabot, unicornbot.
Но я не могу найти что-то.

array_search не работает, array_keys тоже.

Кто-нибудь знает решение в Laravel?

+0

Можете ли вы обновить свой вопрос, включив в него небольшой образец вашего массива и ожидаемый результат? Ex. вы хотите в результате получить массив со всеми ботами или что-то подобное. –

+0

Посмотрите на функцию [array_filter()] (http://www.php.net/manual/en/function.array-filter.php) –

ответ

1

Вы можете использовать библиотеку Crawler Detect, которая позволяет легко идентифицировать ботов/сканеров/пауков. Это может быть так же просто, как пара строк кода. Ниже приведен фрагмент взят из документации библиотеки:

use Jaybizzle\CrawlerDetect\CrawlerDetect; 

$CrawlerDetect = new CrawlerDetect; 

// Check the user agent of the current 'visitor' 
if($CrawlerDetect->isCrawler()) { 
    // true if crawler user agent detected 
} 

// Pass a user agent as a string 
if($CrawlerDetect->isCrawler('Mozilla/5.0 (compatible; Sosospider/2.0; +http://help.soso.com/webspider.htm)')) { 
    // true if crawler user agent detected 
} 
+0

Вы можете обернуть 'isCrawler()' проверку обратного вызова 'array_where '. Ницца! +1 –

0

Вы могли бы сделать что-то вроде этого ...

$newArray = []; 
foreach ($array as $value) { 
    if (str_contains($value, ['bot', 'BOT', 'Bot'])) { 
     $newArray[] = $value; 
    } 
} 

Это будет цикл через массив и использовать Laravel str_contains функции для определения Wether или нет значение массива имеет слово «бот» или варианты в нем, а затем добавляет его в новый массив.

0

Вы можете использовать Laravel helper functions

$array = ['Mozilla', 'Mozilla', 'Mozillabot', 'Mozilla', 'Unicornbot'];  
$array = array_where($array, function($key, $value) 
    { 
     return str_contains($value, 'bot'); 
    }); 
0

Вы можете использовать array_where помощника.

Вместе с помощником str_contains строки, как так

$array = ["Mozilla", "Mozilla", "Mozillabot", "Mozilla", "Unicornbot"]; 

$bots = array_where($array, function ($key, $value) { 
    return str_contains(strtolower($value),array('bot')); 
}); 

Или с помощником str_is строки, которая использует сопоставление с образцом, как этот

$bots = array_where($array, function ($key, $value) { 
    return str_is('*bot*',strtolower($value)); 
}); 

Проверка выполняется против строчных строк, чтобы избежать изменений на «Бот», «БОТ» и так далее.