我可能做错了但是偷看了。如果我对逻辑进行硬编码,它会起作用,但如果我尝试将其用作变量则不行。
if($range <= 50) {
$operator = "<=";
} else {
$operator = ">=";
}
foreach($cursor as $s) {
$data = round($this->distance($zip_lat, $zip_lon, $s["lat"],$s["lon"]), 2);
if ($data .$operator. $range) {
$zipcodes[] = "$s[zipcode]";
}
}
我的意思是,我可以在foreach中添加if / else,但不确定是否会增加任何“开销”。
答案 0 :(得分:5)
尝试:
if ($range <= 50 ? $data <= $range : $data >= $range) {
}
或使用eval()
答案 1 :(得分:4)
if ($data .$operator. $range)
总是如此,因为它是一个字符串,而不是null。
您可以使用这个简单的代码找出问题:
$data="0";
$operator=">=";
$range="1";
if ($data .$operator. $range) {
echo $data .$operator. $range . " is true !";
}
答案 2 :(得分:1)
'点'只能做常规的'字符串'连接 - 你不能指望它们(注入字符串)表现得像普通的'真实'操作符。
考虑一下:if $data = 'data1'
和$range = 50
if语句变为:
if ('data1<=50')
可能只评估为真或假,就像if ('yournamehere')
或if('randommumbojumbo')
答案 3 :(得分:1)
我非常怀疑if只是简单地计算字符串$ date。$ operator。$ range(它将始终返回true),因为你所做的只是将运算符和操作数连接在一起。
因此,你可能需要eval(躲避和掩盖人,躲避和掩护)if的内容。
答案 4 :(得分:0)
您似乎错过了结束}
答案 5 :(得分:0)
我认为你需要这样做:
foreach ( $cursor as $s ) {
$data = round($this->distance($zip_lat, $zip_lon, $s["lat"],$s["lon"]), 2);
if ( $range <= 50 ) {
if ( $data <= $range ) {
$zipcodes[] = "$s[zipcode]";
}
} else {
if ( $data >= $range ) {
$zipcodes[] = "$s[zipcode]";
}
}
}
答案 6 :(得分:0)
您不能拥有代表评估运算符的变量。您必须将代码切换为:
foreach ($cursor as $s) {
$data = round($this->distance($zip_lat, $zip_lon, $s["lat"],$s["lon"]), 2);
if ($range <= 50 && $data <= $range) {
$zipcodes[] = $s['zipcode'];
} else if ($data >= $range) {
$zipcodes[] = $s['zipcode'];
}
}