PHP (değişken değil onur sonunda 0) 1.1 1.10 değeri okur

4 Cevap php

Bu kelime benim için zor, ama bana göstermek için daha kolaydır:

Ben bir select seçeneği var:

<option <?php if($frequency[$key]=='1.10'){echo "selected";}?> value='1.10'>1 every 10 days</option>

Gerçekten, $ frekansı [$ anahtar] = 1.1; Ama yukarıda hala seçili gösterir. Ben daha önce hiç görmemiştim, ve bu olabilirdi bilmiyordum. Bunu önlemek için nasıl herhangi bir fikir?

Working with php5. Thank you, Hudson

4 Cevap

PHP numaralar bu karşılaştırma her iki tarafında bir dizi gibi görünüyor eğer, it'll try to make both operands numbers çok seviyor çünkü. Bu dize, gerçekten olur 1.1, bir şamandıraya döküm ve alır demektir.

Dizeleri karşılaştırmak ve onlar dizeleri olarak karşılaştırıldığında emin olun, ya === (diğer işlenen de dize olduğunu varsayarak), ya da kullanmak kullanmak için strcmp.

if ($frenquency[$key] === '1.10')
if (strcmp($frenquency[$key], '1.10') == 0)

Daha fazla bilgi için, PHP manual on the Comparison Operators, sayfa bölüm 'çeşitli tipleri ile Karşılaştırılması' bkz.

Siz kimlik karşılaştıncının ===, değil eşitlik karşılaştırma == kullanmanız gerekir.

$f = 1.1;
$s = '1.10';

$s == $f;  // true
$s === $f; // false

Veya, bir açık dize karşılaştırma yapabiliriz:

strcmp($s, $f);  // int(-1) -- they are not equal

Sadece bir fikir, ama karşılaştırma yaptığınızda "===" yerine "==" bir denemek, ve bir dize olarak türü zorlamak için yaklaşık 1.10 çift tırnak koymak.

manual o yüzen karşılaştırma söz konusu olduğunda oldukça sert olma eğilimindedir. Eğer 1.1 ile 1.10 arasında bir ayrım istiyorsanız bir dize olarak bunları karşılaştırmak gerekir.