PHP boş bir diziye ekleme Neden, ne zaman, endeks 2 nedir?

2 Cevap php

Ben sınıfının bir dizi üyesi bir öğe ekler bir sınıfta bir yöntem var. Dizi üye boş (ama önceden indeksi 1 ve dizin 2'de bu iki öğe vardı) ve ben yöntemini çağırdığınızda, madde dizin 2 eklenir. Neden? Herkes sağa kapalı yarasa bilmiyorsa, ben çok daha fazla ayrıntı sağlayabilir.

2 Cevap

Sorunuzu doğru anlamak, bu durumda olan:

Önce bu gibi bir dizi var:

$data = array(
    1 => 'abcd',
    2 => 'efg',
);
var_dump($data);

Sen unset tüm unsurları:

unset($data[1], $data[2]);
var_dump($data);

Ve bu gibi verileri taktığınızda:

$data[] = 'glop';
var_dump($data);

Bu endeks 0 koymak değil, fakat 2 (aslında, endeks 3 koymak oluyor, öyle görünüyor - Son varolan indisi, artı bir) sonunda bu dizi vermek:

array(1) {
  [3]=>
  string(4) "glop"
}

Bu ne demek ise, bu davranış documentation of array açıklanmıştır:

As mentioned above, if no key is specified, the maximum of the existing integer indices is taken, and the new key will be that maximum value plus 1. If no integer indices exist yet, the key will be 0 (zero).

Note that the maximum integer key used for this need not currently exist in the array. It need only have existed in the array at some time since the last time the array was re-indexed.

(and there is an example)

Bu :-) yardımcı olur Birazdan (else, can you provide an example of code, actual output, and the output you'd expect ?) soruyu anladım umut ve

Eğer dizi boş olduğundan emin misin? Eğer print_r($obj->memberArray), görmek yoksa Array()? Değeri nedir count($obj->memberArray)?

Ayrıca, anahtarlar anlamlıdır? , Ve dizi boş olması bekliyoruz değilse güvenle $obj->memberArray = array_keys($obj->memberArray) tuşları sıfırlamak çalıştırmak mümkün olmalıdır. Ben karışık (bazı sayısal, bazı dize) endeksleri ile diziler ile uğraşırken PHP garip şeyler yapan bir önsezi var ve son sayısal dizin sonra eklenmesi, bu durumda dizin saklı başlayabilir. Sadece bir önsezi, bu test değil.