Nasıl PHP bir int bir metin değişkeni değiştirebilirim?

5 Cevap php

Ben bir metin alanına girilmektedir bir formdan POST çağrı tarafından definited bir değişken var. Bir interger için bu değişkeni dönüştürmek için herhangi bir yolu var mı?

Formdan:

Lenght: <input name="length" value="10" type="text" id="lenght" size="2" />

Php kodu:

$length = $_POST['lenght'];
$url = substr($url, 0, $length);

Bu işe görünmüyor $ ve uzunluğu metin değil, bir interger olarak tanımlanır çünkü o çalışma olmadığını düşünüyorum neden tek nedeni budur.

5 Cevap

İki şey:

  1. Eğer uzunluğu yanlış çünkü çalışmıyor <-> uzunluk

  2. Bir tamsayı bir dize dönüştürmek için doğru yolu işlevi intval kullanıyor.


$length = intval($_POST['length']);
$url = substr($url, 0, $length);

Eğer iki uzunluğu yanlış çünkü olasılıkla yerine sıfır ya da üç kez, çalışmıyor.

- Doğru orada sorun olabilir boyu vs uzunluğu: kodunuzda bir yazım hatası gibi görünüyor.

Açık bir dönüşüm yapmak için, intval () işlevini kullanın

$length = intval($_POST['length']);

Yukarıda 'uzunluk' bir imla hataları görmezden gelerek açıkça PHP bir tamsayı bir dize dönüştürmek için bir kaç yolu vardır. Genellikle bu dönüşüm otomatik olarak gerçekleşecek. Aşağıdaki kodu atın:

$numeric_string = '42';
echo ($numeric_string * 2);

Bu beklendiği gibi, "84" yazdıracaktır. Üzerinde başvuru bakın Type-Juggling.

Eğer sahip dize sonra ya cast the variable to an Integer can (belki is_numeric() kontrol ederek) bir sayı olduğunu BİLİYOR ise

$numeric_string = '42';
$converted_integer = (int) $numeric_string;
// or
$converted_integer = (integer) $numeric_string;

veya kullanım intval()

$numeric_string = '42';
$converted_integer = intval($numeric_string);

Intval () hakkında hatırlanması gereken önemli bir nokta bir tamsayı içine dize çözemezse eğer bir 0 dönecektir olmasıdır. Bu (potansiyel) (is_numeric() sonra) size hataları kontrol etmek için ikinci bir yol verebilir, ya da düzgün değişken ile başlamak sayısal olduğunu sigortalanması değilse beklenmedik sonuçlara neden olabilir.

Eğer bakıyorsun değer dönüştürmek istediğiniz türü için doğru bir temsil olduğundan eminseniz, ayrıca bir vanilya tipi döküm işlemi kullanabilirsiniz:

$int = (int) "1"; // var_dump($int) => int(1)
$float = (float) "1.2345"; // var_dump($float) => float(1.2345)

Eğer beklediğiniz sonuç olmayabilir ama, yani bir dizi "rastgele bir dize" döküm dönüştürdüğünüz değişkenin yanlış temsilleri sakının. Eğer kullanıcı girişi ele iseniz, bu tür intval ve floatval olarak işlev çağrıları ile yukarıda önerilen çözümleri kullanarak daha iyi konum