过滤字符串数组并保留包含多个关键字之一的元素
Filter array of strings and retain elements containing one of many keywords
我目前已完成所有代码以按一个关键字进行过滤,但我想按 100 多个关键字进行过滤。我在 PHP 方面经验不足,所以我尝试过但失败了。
这是我当前的代码,但我想修改它以使用多个关键字。
function postResolve ($key) {
return isset($_POST[$key]) ? $_POST[$key] : null;
}
$formData = [
'keyword' => postResolve('keyword'),
'text' => postResolve('text')
];
if (is_null($formData['keyword']) || is_null($formData['text'])) {
return 'Nothing to do... Missing text or keyword.';
}
$text = explode(PHP_EOL, $formData['text']);
$storage = [];
foreach ($text as $sentence) {
if (strpos($sentence, $formData['keyword']) !== false) {
$storage[] = trim($sentence);
}
}
echo json_encode($storage);
如果有人可以帮助我进行此更改,我将不胜感激:)
我建议使用 stripos() 而不是 strpos()
。与 strpos()
不同,stripos()
不区分大小写。将您的关键字视为一个数组。假设它们以逗号分隔:
<?php
function postResolve ($key) {
return isset($_POST[$key]) ? $_POST[$key] : NULL;
}
function checkKeywords($sentence, $keywords) {
foreach($keywords as $keyword) {
if(stripos($sentence, $keyword) !== FALSE) { return TRUE; }
}
return FALSE;
}
if(isset($_POST) && !empty($_POST)) {
$formData = array(
'keywords' => postResolve('keywords'),
'text' => postResolve('text')
);
if(is_null($formData['keywords']) || is_null($formData['text'])) {
echo 'Nothing to do... Missing text or keyword.';
}
$text = explode(PHP_EOL, $formData['text']);
$keywords = explode(',', $formData['keywords']);
$storage = array();
foreach($text as $sentence) {
if(checkKeywords($sentence, $keywords)) {
$storage[] = trim($sentence);
}
}
echo json_encode($storage);
exit();
}
?>
<form>
<textarea name="keywords"></textarea>
<textarea name="text"></textarea>
<input type="submit" value="Submit">
</form>
<div></div>
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
<script>
$('form').on('submit', function(event) {
event.preventDefault();
$('div').load(location.href, $('form').serializeArray());
});
</script>
我目前已完成所有代码以按一个关键字进行过滤,但我想按 100 多个关键字进行过滤。我在 PHP 方面经验不足,所以我尝试过但失败了。
这是我当前的代码,但我想修改它以使用多个关键字。
function postResolve ($key) {
return isset($_POST[$key]) ? $_POST[$key] : null;
}
$formData = [
'keyword' => postResolve('keyword'),
'text' => postResolve('text')
];
if (is_null($formData['keyword']) || is_null($formData['text'])) {
return 'Nothing to do... Missing text or keyword.';
}
$text = explode(PHP_EOL, $formData['text']);
$storage = [];
foreach ($text as $sentence) {
if (strpos($sentence, $formData['keyword']) !== false) {
$storage[] = trim($sentence);
}
}
echo json_encode($storage);
如果有人可以帮助我进行此更改,我将不胜感激:)
我建议使用 stripos() 而不是 strpos()
。与 strpos()
不同,stripos()
不区分大小写。将您的关键字视为一个数组。假设它们以逗号分隔:
<?php
function postResolve ($key) {
return isset($_POST[$key]) ? $_POST[$key] : NULL;
}
function checkKeywords($sentence, $keywords) {
foreach($keywords as $keyword) {
if(stripos($sentence, $keyword) !== FALSE) { return TRUE; }
}
return FALSE;
}
if(isset($_POST) && !empty($_POST)) {
$formData = array(
'keywords' => postResolve('keywords'),
'text' => postResolve('text')
);
if(is_null($formData['keywords']) || is_null($formData['text'])) {
echo 'Nothing to do... Missing text or keyword.';
}
$text = explode(PHP_EOL, $formData['text']);
$keywords = explode(',', $formData['keywords']);
$storage = array();
foreach($text as $sentence) {
if(checkKeywords($sentence, $keywords)) {
$storage[] = trim($sentence);
}
}
echo json_encode($storage);
exit();
}
?>
<form>
<textarea name="keywords"></textarea>
<textarea name="text"></textarea>
<input type="submit" value="Submit">
</form>
<div></div>
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
<script>
$('form').on('submit', function(event) {
event.preventDefault();
$('div').load(location.href, $('form').serializeArray());
});
</script>