PHP dizinin ortasında bir öğe koymak için kolay bir yolu nedir?

4 Cevap php

Bir 10 eleman endeksli bir dizi var ve sizi (bir dizin ki 3) ortada bir yerde bir öğe yerleştirmek istiyorsanız söyleyin. Sonra dizi vardiya dinlenme ve böylece uzun 11 eleman olmak istiyorum. Bunu yapmanın kolay bir yolu var mı?

Ben put() işlevi veya bir şey şaşırttı.

Ben array_splice ve array_merge bir kombinasyonu ile bunu yapmak için yeterince kolay olurdu biliyorum ama eğer ben sadece kolay bir yol merak ediyordum.

4 Cevap

array_splice() does this

$input = array("red", "green", "blue", "yellow");
array_splice($input, 3, 0, "purple");
// $input is now array("red", "green", "blue", "purple", "yellow");

Ne yazık ki en iyi bahis postanıza tarif budur.

Eğer array_splice () kullanırsanız, PHP hala büyük dizi boyutları için bir performans hit olacak ekleme yapmak için yarım dizi kopyalamak zorunda olacak. Belki bunun yerine bir liste veya ağaç datastructure kullanıyor olmalıdır?

Ben ekleme tür ölçüde benzer bazı işlemleri yaparken zaman ben hiç bir dizinin ortasına eklemek için gerekli ettik sadece zaman oldu. Belki bir dizide sıralanmamış öğeleri saklamak, ve sonra hepsini ekledikten sonra bunları sıralamak istiyorum?

Hiçbir PHP işlevi anda bu işleyebilir. Ancak, kendi kamçılamak için çok zor değildir:

function array_insert(&$array, $insert, $position) {
    $c = count($array);
    $slice = array_merge($insert, array_slice($array, $position));
    array_splice($array, $position, $c, $slice);
}

$array = array('a','b','d','e');
print_r($array);
array_insert($array, array('c'), 2);
print_r($array);

: Neden olacaktır

Array
(
    [0] => a
    [1] => b
    [2] => d
    [3] => e
)
Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => d
    [4] => e
)

Pozisyon dizi daha büyük ise muhtemelen kontrolleri ekleyebilirsiniz, insert bir dizi, vs değil