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