Deyimi doğru çalışması için görünmüyor ise

7 Cevap

Ben yanlış yapıyor ama bir göz atmanız olabilir. Ben mantığı hardcode ben bir değişken olarak kullanmaya çalışırsanız, ama çalışır.

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]";   
    }
}               

Yani, foreach içinde if / else eklemek ama herhangi ekler eğer emin değildi "yükü."

7 Cevap

deneyin:

if ($range <= 50 ? $data <= $range : $data >= $range) {

}

veya eval () kullanmak

 if ($data .$operator. $range) 

Bir dize, bir null olduğu için, her zaman doğrudur.

Bu basit bir kod kullanarak sorunu bulabilirsiniz:

$data="0";
$operator=">=";
$range="1";

if ($data .$operator. $range) {
       echo   $data .$operator. $range . " is true !";   
}                   

'Noktalar' sadece normal 'string' birleştirme yapmak - Düzenli, 'gerçek' operatörleri gibi davranmaya, onları (dizeleri olarak enjekte) bekleyemezsiniz.

Bir düşünün: Eğer $data = 'data1' ve $range = 50 beyanı olursa:

Muhtemelen sadece değerlendirecek if ('data1<=50'), hangisinin doğru ya da yanlış, sadece if ('yournamehere') veya if('randommumbojumbo') olarak

Ben çok şüpheli yapıyoruz hep birlikte operatörü ve işlenen birleştirerek olarak basitçe, string $ tarih. $ Operatörü (her zaman doğru dönecektir). $ Aralığında değerlendirmek durumunda.

Bunun gibi, eval (ördek ve kapak insanlar, ördek ve kapak) eğer içeriğine gerekebilir.

Sen} Bir kapanış eksik görünüyor

Bunu yapmak için ihtiyacımız olacak düşünüyorum:

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]";   
      }
    }
}   

Sen bir değerlendirme operatörünü temsil eden bir değişken olamaz. Sen böyle bir şey için kodunuzu geçmek zorunda olacaktır:

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'];
    }
}