我正在尝试创建一个脚本来检查某个值是否在逗号分隔的字符串中,如果该值存在,则应该返回true,否则它应该返回false。
基本上,我试图检查用户之前是否投票给某个人,如果是,他们就不能再投票,如果他们没有投票,则投票然后将他们的uid添加到数据库。
我正在使用explode将所有值都放到数组中,但我不确定检查函数,我有一些想法,但这是一个非常重要的脚本,所以我想看看是否有更好的方法去关于它。
$test = "john,jack,tom";
$exploded = explode(",",$test);
$hostID = "john";
foreach($exploded as $one){
if($one == $hostID){
$return = TRUE;
}else{
$return = FALSE;
};
};
提前Thanx!
答案 0 :(得分:3)
true
和false
。}
之后的分号$return = TRUE
实际上并没有停止该功能。也许你做return $return
。代码:
function find_name($name, $list)
{
$exploded = explode(',', $list);
return in_array($name, $exploded);
}
var_dump(find_name('john', 'john,jack,tom'));
?>
答案 1 :(得分:1)
您也可以使用
strpos
- 查找第一次出现字符串的位置代替:
return strpos('john,jack,tom', 'barney'); // returns FALSE
请注意,如果找到字符串,该函数将返回位置,因此搜索 john 将返回零,如果您将其与相等性进行比较,则为FALSE
==
})。换句话说,使用身份比较器(===
)。
正如Lucanos正确指出的那样,如果搜索到的名称是较长名称的一部分,则可能会在使用strpos时出现误报,例如:只搜索 jean 也会找到 jean-luc 。你可以在haystack字符串的末尾添加一个逗号,然后搜索 jean,,但是再一次,它感觉很乱。因此,最好使用in_array
。
答案 2 :(得分:1)
正如Sjoerd所说,他非常好的建议。
function find_name( $needle , $haystack ) {
if( strpos( $haystack , $needle )===false )
return false;
return in_array( $needle , explode( ',' , $haystack ) );
}
测试用例:
// find_name( 'john' , 'peter,mark,john' );
true
// find_name( 'peter' , 'mark,john' );
false
编辑:根据戈登的建议。