我正在努力弄清楚如何使用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';
}
}
答案 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';
}