PHP 条件判断字符串是否包含变量

PHP Conditional to see if string contains a variable

我正在努力弄清楚如何使用 PHP strpos 在字符串中查找变量。如果我直接输入一个数字,下面的代码就可以工作,但如果我用一个我知道是单个数字的变量替换该数字,那么下面的代码就不会工作。不存在 PHP 错误,但条件呈现错误。我一直在四处寻找,被这个难住了。

$string变量returns "253,254,255".

$current_page_id变量returns"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';
        }
    }

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

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

以下来自php docs:

If needle is not a string, it is converted to an integer and applied as the ordinal value of a character.

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

我建议你改变你的方法。您应该搜索确切的字符串值。因为正如@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';
 }

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

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

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

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

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

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