if语句使用变量作为条件

时间:2015-01-20 09:20:45

标签: php

这是代码:

<?php
$str = "AEIOU 086432";
$con = "(1 == 1) && " ;
$con = $con.'(preg_match("/U/", $str)) && ';  
$con = $con.'(preg_match("/82/", $str)) && '; 
$con = "(2 == 2)" ; 
if($con){
echo "Found" ;
}

else{
echo "Not Found" ;
}
?>

这个答案应该是#34;未找到&#34;。问题在哪里?

4 个答案:

答案 0 :(得分:1)

这是你的解决方案:

<?php
function p($str){
$con = (1 == 1)  ;
$con = $con &&  (preg_match("/U/", $str));  
$con = $con &&  (preg_match("/0865/", $str)) ; 
$con =  $con &&  (2 == 2);
return $con;
}

$str = "AEIOU 086432";
//var_dump( filter_var($con, FILTER_VALIDATE_BOOLEAN));

if(  p($str) ){
echo "Found" ;
}

else{
echo "Not Found" ;
}
?>

希望你会满意.....

答案 1 :(得分:0)

(bool)'2 == 2'false。它应该是true吗?

你有错误,在第6行缺少连接字符串的点。

$con .= "(2 == 2)" ;   
//   ^

您需要使用eval来获取Found,但更好的方法是避免使用类似的解决方案并使其正常运行。

$str = "AEIOU 086432";
if ((1 == 1) && (preg_match("/U/", $str)) &&  (preg_match("/82/", $str)) &&  2 == 2)) {
    echo 'Found';
}  else {
    echo 'Not found';
}

条件1 == 12 == 2可以删除,它们始终为true

答案 2 :(得分:0)

解释评论:

  

我想发明一种模拟SQL语言来过滤存储在数组中的数据。

您不需要发明“PHPQL”。 SQL是一种基于文本的查询语言,因为它为数据存储系统提供了一个通用的基于文本的接口。你不需要发明这种通用的文本语言;只需编写PHP代码。如果您可以编写$con = $con.'(preg_match("/U/", $str)) && '之类的内容,您也可以编写实际代码:

$results = array_filter($data, function (array $item) {
    return preg_match('/U/', $item['key']) && ..
});

这将根据您需要的条件过滤数据数组,条件作为回调函数提供。

答案 3 :(得分:-1)

您使用变量$con作为布尔值,同时它包含字符串值:

if ($con) {
    echo "Found";
} else {
    echo "Not Found";
}

请查看有关type juggling的文档页面以及字符串converted to booleans的方式。

此时,变量$con的值为(2 == 2),转换为TRUE时评估为boolean

另请参阅strings文档,名为Useful functions and operators的部分明确指出:

  

字符串可以使用'。'连接。 (点)操作员。