Я дублирую свою проверку ключевых слов strpos, но не хочу - PullRequest
0 голосов
/ 28 апреля 2018

Я вытягиваю несколько значений ($ arr) из списка ключевых слов ($words). Позже я использую strpos, чтобы проверить, существует ли это ключевое слово в документе.

Я мог бы просто продублировать весь код и добавить каждый $ arr один за другим, например: strpos ($ element, $ arr [0]); StrPos ($ элемент, $ обр [1]); StrPos ($ элемент, $ обр [2]) ;.

Может ли кто-нибудь помочь мне настроить его так, чтобы мне не пришлось делать это долго. Допустим, мне нужно в общей сложности 20 $ чеков. Это было бы от $ arr [0] до $ arr [19].

<?php

$str= "$keywords";
$arr=explode(",",$str);

// print_r($arr);

$data = file($_SERVER['DOCUMENT_ROOT'].'/posts.txt');

$data=str_replace(array('<', '>', '\\', '/', '='), "", $data);

foreach($data as $element) 

{

$element = trim($element);

$check_keyword = strpos($element,$arr[0]);
if ($check_keyword !== false) {
$pieces = explode("|", $element);   

echo "

" . $pieces[0] . "  

<a href=/blog/" . $pieces[2] . "/" . $pieces[3] . "/ ><b><font color=#21b5ec>" . $pieces[4] . "</font></b></a>  <br>

";    

}

else {
echo "";
}

}

?>

1 Ответ

0 голосов
/ 28 апреля 2018

Если вы хотите проверить каждое значение в $arr против $element, то самый простой способ сделать это с помощью array_reduce.

Если вы хотите проверить, находится ли каждое значение в $arr в $element, вы можете использовать это:

$check_keyword = array_reduce($arr, function ($carry, $item) use($element) {
        return $carry && (strpos($element, $item) !== false);
    }, true);

Если вы хотите проверить, есть ли любое значение в $arr в $element, вы можете использовать это:

$check_keyword = array_reduce($arr, function ($carry, $item) use($element) {
        return $carry || (strpos($element, $item) !== false);
    }, false);
...