我想知道如何完成多次strpos检查。
让我澄清一下:
我想要strpos来检查变量“COLOR”以查看变量中是否存在1到8之间的任何数字。如果存在从1到8的任何数字,我想回显“已选择”。
示例:
假设只有数字1在变量中,将回显“已选择”
假设数字1 2和3在变量中,将回显“已选中”。
假设数字3 9 25在变量中,将回显“选中”(因为那个!! !!)。
假设只有数字9在变量中,不会回显
假设数字9 25 48在变量中,不会回显。
答案 0 :(得分:12)
我刚使用了OR语句(||)
<?php
if (strpos($color,'1') || strpos($color,'2') || strpos($color,'3') || strpos($color,'4') || strpos($color,'5') || strpos($color,'6') || strpos($color,'7') || strpos($color,'8') === true)
{
//do nothing
} else {
echo "checked";
}
?>
答案 1 :(得分:8)
我发现上述答案不完整,并提出了我自己的功能:
$string = "A dog walks down the street with a mouse";
$check = 'dog';
$checks = ['dog', 'cat', 'mouse'];
#
# Quick first position found with single/multiple check
#
if (false !== $pos = multi_strpos($string, $check))
{
echo "$check was found at position $pos<br>";
}
if (false !== $pos = multi_strpos($string, $checks))
{
echo "A match was found at position $pos<br>";
}
#
# Multiple position found check
#
if (is_array($found = multi_strpos($string, $checks, true)))
{
foreach ($found as $s => $pos)
{
echo "$s was found at position $pos<br>";
}
}
用法:
{{1}}
答案 2 :(得分:8)
答案 3 :(得分:2)
如果所有值都按值中的空格分隔,则可以执行以下操作。 否则忽略它。
这是必要的,因为如果你有$color="25";
,那么strpos
将会发现2,5和25这样所需的结果将不会出现
<?php
$color='1 25 48 9 3';
$color_array = explode(" ",$color);
$find = range(1,8);//array containing 1 to 8
$isFound = false;
foreach($find as $value) {
if(in_array($value, $color_array))
{
$isFound = true;
break;
}
}
if($isFound) {
echo "Selected";
}
?>
答案 4 :(得分:0)
if (preg_match('/string1|string2|string3/i', $str)){
//if one of them found
}else{
//all of them can not found
}
答案 5 :(得分:0)
使用数字字符类周围的字边界进行的简单preg_match()
调用将完全准确,适合您的任务。
单词边界元字符可确保执行完整整数匹配-不会出现假阳性(部分)匹配。
代码:(Demo)
$array = array(
'text 1 2 and 3 text',
'text 3 9 25 text',
'text 9 25 48 text',
);
foreach ($array as $color) {
echo "\n---\n$color";
echo "\n\t" , preg_match('~\b[1-8]\b~', $color, $out) ? "checked (satisfied by {$out[0]})" : 'not found';
echo "\n\tChad says: " , (strpos($color,'1') || strpos($color,'2') || strpos($color,'3') || strpos($color,'4') || strpos($color,'5') || strpos($color,'6') || strpos($color,'7') || strpos($color,'8') ? 'found' : 'not found');
}
输出:
---
text 1 2 and 3 text
checked (satisfied by 1)
Chad says: found
---
text 3 9 25 text
checked (satisfied by 3)
Chad says: found
---
text 9 25 48 text
not found
Chad says: found
关于如何在脚本中实现此技术...
if (!preg_match('~\b[1-8]\b~', $color)) {
echo 'checked';
}
答案 6 :(得分:0)
我也有类似的需求,所以这里的功能是获取给定字符串中最接近的子字符串的位置,其中搜索子字符串在数组中提供。它还通过引用匹配的子字符串传递。 请注意,如果某些子字符串包含其他子字符串,则顺序很重要-例如:“ ...”和“。”。
function strpos_arr($haystack, $needleN, $offset = 0, &$needle = '') {
if (!is_array($needleN)) {
return strpos($haystack, $needleN, $offset);
} else {
$res = FALSE;
foreach ($needleN as $ind => $item) {
$pos = strpos($haystack, $item, $offset);
if ($pos !== FALSE && ($res === FALSE || $pos < $res)) {
$res = $pos;
$needle = $item;
}
}
return $res;
}
}