Anahtarların Dizeler olduğu bir dizi var, ancak bu dizeler bazen yalnızca sayılardır (ör. "123"). Diziye "123" anahtarıyla erişmeye çalışırken, bir Tanımlanmamış Dizin uyarısı alırız. Sadece tam sayı 123 ile erişirken, Tanımlanmamış Ofset bildirimini alırız. Bu bize "123" dizesini kullanarak doğru şekilde dizine eklememizi söylüyor, ancak hala ayarlanmadı.Dize anahtarı x ile erişim dizisi, burada x "123" dir
Bu SO sorusu için bir örnek bulmaya çalışmak, bu zor çünkü PHP, test durumumuzdaki dizi anahtarlarını otomatik olarak tam sayılara dönüştürürken, gerçek dünyadaki uygulamada bu gerçekleşmez (Java kullanımı nedeniyle) Köprü). Şimdi çalışıyoruz testi dizidir:
<?php
$array = array("123" => array(108, 8));
var_dump($array);
?>
Bu döndürür: Bizim gerçek dünya eşdeğer iken
array(1) { [123]=> array(2) { [0]=> int(108) [1]=> int(8) } }
, bu dönecekti:
array(1) { ["123"]=> array(2) { [0]=> int(108) [1]=> int(8) } }
Yani gerçek dünya endeksi aslında bir String'dir:
<?php
foreach ($array as $key => $value) {
if (!isset($array[$key])) {
print "What is happening here?";
}
}
?>
verir:
What is happening here?
Yoshi 'açıklama dayanarak, burada çalışıyor Test kodu:
210 döner Yaniarray(1) { [0]=> string(3) "123" }
, nihayet soru şu kod çıkışı
<?php
$array = (array)json_decode('{"123":[108,8]}');
foreach ($array as $key => $value) {
if (!isset($array[$key])) {
print "What is happening here?";
} else {
print "Nothing to see here, move along";
}
}
?>
Sorunuza cevap size yardımcı olamaz:
İşte benim çözümdür. Ama eğer '$ array = (array) json_decode ('{" 123 ": [108,8]}') kullanırsanız,' 'Gerçek dünya örneğinizi (123'lü bir dize tuşu olarak) alırsınız. Belki bu başkalarının sorunu yeniden üretmesine yardımcı olabilir. – Yoshi
(başvuru) http: // codepad.org/ewMJyKDU Bunun gerçekten ilginç bir soru olduğunu düşünüyorum. Ve umarım birileri davranışa ışık tutabilir. – Yoshi