Başka bir PHP dizinin bir kopyasını yapmak için bir işlevi var mı?

5 Cevap php

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.

5 Cevap

PHP varsayılan dizi kopyalar. PHP Kaynaklar açık olmak zorunda.

$a = array(1,2);
$b = $a; // $b will be a different array
$c = &$a; // $c will be a reference to $a

Bunu yaptığınızda

$array_x = $array_y;

PHP kopyalar dizi, bu yüzden yandı aldık nasıl emin değilim. Dava için,

global $foo;
$foo = $obj->bar;

cezası çalışması gerekir.

Yandı almak için, sana klonlanan diziler içinde nesneleri başvurular kullanarak veya bekliyor edilmiş olurdu ya düşünürdü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);
}