这是代码:
<?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;。问题在哪里?
答案 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 == 1
和2 == 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的部分明确指出:
字符串可以使用'。'连接。 (点)操作员。