Dizi anahtarları olarak kullanıldığında PHP numaraları dizeleri ile ne yapar?

4 Cevap

Ben böyle bir ilişkisel dizi oluşturmak çalışıyorum:

$key = '0'
$arr = array((string)$key=>$value);

Daha sonra, is_string(array_keys($arr)[0]) döner false kontrol.

Döküm 'yardım etmedi yerine "kullanarak yardım etmedi.

Ben yanlış bir şey yapıyor, ya da bu çevrede başka bir yolu yoktur, ya da sayısal bir dize dizisi anahtarı olması imkansız muyum?

4 Cevap

PHP sadece değişkenlere atama daha özel yol biraz diziler dizinleri yönetir. Kurallar açıkça kılavuzunda yazılır. İşte soru ile ilgili alıntıdır.

Bir anahtar bir tamsayı ya da bir dize olabilir. Bir anahtar, bir tamsayı standart gösterimi ise, bu gibi yorumlanır (yani "8" "08" "08" olarak yorumlanır olacak iken, 8 olarak yorumlanır). Anahtarında Şamandıralar tamsayı kesiliyor. Indisli ve ilişkisel diziler, her ikisi de tamsayı ve dize endeksleri içerebilir PHP aynı tip vardır.

Quote from http://php.net/manual/en/language.types.array.php

Indeksi olarak kullanıldığında bunlar tamamen sayısal eğer PHP, dizeleri, sayılar dönüştürülür. Bir dizi anahtar olarak atarken, bu erişim tamsayıya dönüştürülür ve aynı, sen 0 anahtar erişmek için $ dizi ['0 '] kullanabilirsiniz.

Set as Integer, but Accessible as String...

Onların değeri hakkında bir şey atamasını engelleyen sürece tuşları "tamsayı" türü assined olacağını görünür. Ben gettype() çizgi ile göstermek gibi, dizeleri olarak onlara erişmek mümkün.

$array = array("0" => "Jonathan", "1" => "Sampson");
$keys  = array_keys($array);
print gettype((string)$keys[0]); // string

Muhtemelen birden fazla farklı tip aslında belirli bir tip olmak için onlara güveniyor ASLA olarak yorumlanabilecek bir değişkene atarken.