PHP条件查看字符串是否包含变量

时间:2018-01-16 22:11:32

标签: php conditional strpos

我正在努力弄清楚如何使用PHP strpos在字符串中查找变量。如果我直接输入数字,下面的代码是有效的,但如果我用一个我知道的变量代替数字,那么代码就不行。不存在PHP错误,但条件呈现为false。我一直在寻找,并为此感到难过。

$ string变量返回“253,254,255”。

$ current_page_id变量返回“253”。

    $string = "";
    foreach( $page_capabilities as $post):
        $string .= $post->ID.',';
    endforeach;
    if (strpos($string, $current_page_id) !== false) {

        // This works
        //if (strpos($string, '253') !== false) {

        // This does not
        if (strpos($string, $current_page_id) !== false) {
            echo 'true';
        }
    }

4 个答案:

答案 0 :(得分:4)

您不需要CSV字符串来检查您正在寻找的ID。您可以在当前正在构建字符串的foreach循环中执行此操作。

foreach ($page_capabilities as $post) {
    if ($post->ID == $current_page_id) {
        echo 'true';
        break;     // stop looking if you find it
    }
}

答案 1 :(得分:2)

您应该将$current_page_id转换为字符串:

if (strpos($string, (string)$current_page_id) !== false) { ...

以下内容来自php docs

  

如果needle不是字符串,则将其转换为整数并应用   作为一个角色的序数值。

这意味着您将“253,254,255”与ASCII表中对应于253的字符进行比较

答案 2 :(得分:0)

我建议你改变你的做法。您应该搜索确切的字符串值。因为@mickmackusa建议,它会找到25& 53也是

 $page_capabilities = array(array('POSTID' => 253),array('POSTID' => 254),array('POSTID' => 255));
 $current_page_id = '255';

 $key = array_search($current_page_id, array_column($page_capabilities, 'POSTID'));
 if($key !== false) {
    echo 'true';
 }

答案 3 :(得分:0)

您需要将整数转换为字符串。

$postIDs = [55, 89, 144, 233];

$string = implode(',', $postIDs);
$postID = 55;

if(strpos($string, strval($postID)) !== false) {
    echo 'strpos did not return false';
}