使用PHP对分隔的字符串进行排序

时间:2010-06-28 07:12:53

标签: php

我正在尝试创建一个脚本来检查某个值是否在逗号分隔的字符串中,如果该值存在,则应该返回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!

3 个答案:

答案 0 :(得分:3)

  • 您可以使用in_array
  • 有些人更喜欢使用小写truefalse
  • 不需要}之后的分号
  • $return = TRUE实际上并没有停止该功能。也许你做return $return
  • 有些人喜欢在逗号和关键字之后添加空格(例如foreach,if,else)
  • 有些人更喜欢单引号而不是双引号

代码:

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

编辑:根据戈登的建议。