PHP nasıl diziler içinde dizi-başvuruları kullanabilirsiniz?

4 Cevap php

Ben aşağıdakileri yapabiliyor olmak istiyorum:

$normal_array       = array();
$array_of_arrayrefs = array( &$normal_array );

// Here I want to access the $normal_array reference **as a reference**,
// but that doesn't work obviously. How to do it?
end( $array_of_arrayrefs )["one"] = 1; // choking on this one

print $normal_array["one"]; // should output 1

Selamlar

/ R

4 Cevap

end() son değerinin bir başvuru döndürmek değil, aksine son değer kendisi. Burada bir geçici çözüm:

$normal_array       = array();
$array_of_arrayrefs = array( &$normal_array );

$refArray = &end_byref( $array_of_arrayrefs );
$refArray["one"] = 1;

print $normal_array["one"]; // should output 1

function &end_byref( &$array ) {
    $lastKey = end(array_keys($array));
    end($array);
    return $array[$lastKey];
}

Muhtemelen ilk olarak referans ile bu geçen olmamalıdır. Devlet olarak alır nerede zor görmek için yapar, çünkü genellikle, bunu yapmak için kötü bir uygulama olarak kabul edilir.

Bu referanslar daha hızlı çok yaygın bir kanı var. Bu durum değil - Aslında, onlar biraz daha yavaş, ama bu gerçekten önemli değil ki, böyle küçük bir miktar var. PHP bunları yazmadan önce değişkenler aslında, kopyalanamaz değilsiniz demektir copy-on-write denilen bir sistemi vardır.

Eğer gerçekten başvurular gereken tek yer, nesneler aksi klonlanmış alacağı PHP4, vardı. Bu PHP5'ta gerekli değildir.

Fonksiyonu uç () sadece bir değer döndürmez. Ayrıca dizinin dahili hareket ettirir. Sonra biz atama için normal dizi erişimi mümkün olacaktır sonra, endeksi almak için () tuşunu kullanabilirsiniz.

$normal_array       = array();
$array_of_arrayrefs = array( &$normal_array );

end($array_of_arrayrefs);
$array_of_arrayrefs[ key($array_of_arrayrefs) ]["one"] = 1;

print $normal_array["one"];

Satır:

end ($ array_of_arrayrefs) ["bir"] = 1; / / Bu bir boğulma

throws a parse error: "Parse error: syntax error, unexpected '[' in /file.php on line 65" Make sure you have error_reporting and display_error activated.

Ben size ne yapmak istediğinizi emin değilim ama bu işleri:

$normal_array       = array();
$array_of_arrayrefs = array( &$normal_array );
// Here I want to access the $normal_array reference **as a reference**,
// but that doesn't work obviously. How to do it?
$array_of_arrayrefs[0]["one"] = 1;
//end($array_of_arrayrefs )["one"] = 1; // choking on this one
print $normal_array["one"]; // should output 1