Başka bir PHP dizinin bir kopyasını yapmak için bir işlevi var mı?
PHP dizileri kopyalamak için çalışırken birkaç kez yakıldı. Bunun dışında küresel bir nesnenin içinde tanımlanmış bir dizi kopyalamak istiyorum.
Nesnelerine başvuru tarafından atanır ise PHP diziler, kopya tarafından atanır. Bu durum şu anlama gelir:
$a = array();
$b = $a;
$b['foo'] = 42;
var_dump($a);
Verecektir:
array(0) {
}
Oysa:
$a = new StdClass();
$b = $a;
$b->foo = 42;
var_dump($a);
Verim:
object(stdClass)#1 (1) {
["foo"]=>
int(42)
}
Edit: @ AndrewLarsson aşağıdaki yorum bir noktaya yükseltir. PHP "referanslar" adı verilen özel bir özelliği vardır. Bunlar C / C + + gibi dillerde işaretçiler biraz benzer, ama oldukça aynı değildir. Lütfen dizi başvuruları içeriyorsa dizi kendini kopya geçti ise, daha sonra, referanslar hala orijinal hedefe çözecektir. Bu tabii, genellikle istenen davranış, ama kayda değer olduğunu düşündüm.
Nesneleri içeren bir dizi varsa, iç işaretçi dokunmadan o dizinin bir kopyasını yapmak gerekir, ve kopyalanan değişiklik yaptığınızda orijinalleri değiştirerek değiliz ki sen (klonlanmış olan tüm nesneleri gerekir array), bu kullanın. Hüner emin dizinin bir kopyası ile çalışıyoruz, değil orijinal dizi (veya ona referans) yapmak, bu nedenle burada bir fonksiyon parametresini kullanarak işi olacaktır. Bu fonksiyon aynı zamanda (karışık tip dahil) dizisinin herhangi bir türü için sadece iyi çalışır.
function clone_array($copied_array) {
return array_map(function($element) {
return (
((is_array($element))
? call_user_func(__FUNCTION__, $element)
: ((is_object($element))
? clone $element
: $element
)
)
);
}, $copied_array);
}