我有一个很长的字符串列表,称为 $stringfilter 1 $stringfilter 2 等,一直到 $stringfilter 50
我有另一个字符串$reporteremail,我想做一个条件语句,如果$reporteremail中存在任何$stringfilter字符串,则会执行一些代码。目前我的代码看起来像这样,它可以工作:
if (stripos($reporteremail, $stringfilter1) !== false || stripos($reporteremail, $stringfilter2) !== false || stripos($reporteremail, $stringfilter3) !== false [...]) {
runcode();
}
不过,这非常非常长。我在这里缩短了它。
我想知道是否有一种更清洁、更有效的方法可以做到这一点?
编辑:我正在为错误跟踪器编写一个插件。字符串在另一页上的文本框中输入。我通过运行一个看起来像
$t_filter = plugin_config_get( 'filter1' );
$stringfilter1 = string_attribute( $t_filter1 );
我同意遍历数组将是执行此操作的最佳方法。如何将每个新字符串推送到数组的末尾,而不必将该片段写出 50 次?
如何将每个新字符串推送到数组的末尾,而不必将该片段写出 50 次?
试试这个:
$needles = [];
for ($i = 0; $i < 50; $i++) {
$t_filter = plugin_config_get("filter$i");
$needles[] = string_attribute($t_filter);
}
我有一个很长的字符串列表,称为 $stringfilter 1 $stringfilter 2 等,一直到 $stringfilter 50
[...]
不过,这非常非常长。我在这里缩短了它。
我想知道是否有一种更清洁、更有效的方法可以做到这一点?
试试这个,它应该在上面的代码块之后。
$flag = false;
foreach ($needles as $needle) {
if (stripos($reporteremail, $needle) !== false) {
$flag = true;
break;
}
}
if ($flag) {
runcode();
}
上面的代码通过遍历 $needles
数组来工作,并在stripos
不返回 false 时设置一个标志。完成迭代后,它会检查标志是否为真,如果是,这意味着在数组中找到了其中一个针。
编辑或者,您可以在一个循环中完成所有操作,这既更快又更高效。
$flag = false;
for ($i = 0; $i < 50; $i++) {
$t_filter = plugin_config_get("filter$i");
$needle = string_attribute($t_filter);
if (stripos($reporteremail, $needle) !== false) {
// One of the needles was found in $reporteremail.
runcode();
break;
}
}
你不需要循环。首先将所有过滤器放在一个数组中,而不是将它们放在单独的变量中。我会尝试通过修改输入源而不是在您的 PHP 脚本中执行此操作来做到这一点。(根据您的评论,我不确定这是否可能,所以也许您确实需要一个像另一个答案中的循环。然后,您可以使用str_ireplace
检查$reporteremail
中的筛选器字符串。(这不会修改$reporteremail
。
str_ireplace($filters, '', $reporteremail, $count);
if ($count) {
// run code
}
$count
参数将包含执行的替换次数的计数。如果它不为零,则在 $reporteremail
中找到至少一个过滤器。