Я хочу выбрать определенные слова из предложения в соответствии с моим списком массивов
$sentence = "please take this words only to display in my browser"; $list = array ("display","browser","words","in");
Я хочу, чтобы результат был так же, как «отображение слов в браузере»
пожалуйста, помогите мне с этим. СПАСИБО
Интересно, сделает ли это один лайнер:
echo join(" ", array_intersect($list, explode(" ",$sentence)));
Используйте на свой риск 🙂
edit: yay, он выполняет эту работу, просто проверял
Вы можете сделать это с помощью preg_match:
$sentence = "please take this words only to display in my browser"; $list = array ("display","browser","words","in"); preg_match_all('/\b'.implode('\b|\b', $list).'\b/i', $sentence, $matches) ; print_r($matches);
Вы получите слова в порядке
Array ( [0] => Array ( [0] => words [1] => display [2] => in [3] => browser ) )
Но будьте осторожны с регулярными выражениями, если текст не так прост.
Я не знаю короткой версии для этого, вместо того, чтобы проверять слово за словом.
$words = explode(" ", $sentence); $new_sentence_array = array(); foreach($words as $word) { if(in_array($word, $list)) { $new_sentence_array[] = $word; } } $new_sentece = implode(" ", $new_sentence_array); echo $new_sentence;
Я думаю, вы могли бы искать строку для каждого значения в массиве и назначать ее новому массиву со значением strpos
в качестве ключа; что даст вам сортируемый массив, который вы можете вывести в том порядке, в котором условия появятся в строке. См. Ниже или пример .
<?php $sentence = "please take this words only to display in my browser"; $list = array ("display","browser","words","in"); $found = array(); foreach($list as $k => $v){ $position = strpos(strtolower($sentence), strtolower($v)); if($position){ $found[$position] = $v; } } ksort($found); foreach($found as $v){ echo $v.' '; } ?>
$narray=array(); foreach ($list as $value) { $status=stristr($sentence, $value); if ($status) { $narray[]=$value; } } echo @implode(" ",$narray);