O () PHP array_shift kullanın ve anahtarı almak mümkün mü?

4 Cevap php

Ben dosya anahtar ve değer saniye içinde son değiştirilme tarihi bir dizide dosyaların bir listesi var. Onlar eski den yeni için sıralanır.

Dosya glob() 'in d, ve sonra kullanarak bu şekilde sıralanmış olan

asort($fileNameToLastModified, SORT_NUMERIC);

I array_shift() eski dosyayı almak için kullanabilirsiniz. Ne yazık ki, bana değer veren gibi görünüyor, ve anahtarı almak için bir yol olarak görünmüyor.

Bunu yapmak için tek yolu bu gibi bir şey olurdu?

$keys = array_keys($fileNameToLastModified);

$oldest = array_shift($keys);
array_shift($fileNameToLastModified); // to manually chop the first array member off too.

... Ya da bunu yapmak için yerleşik bir yöntem var mıdır?

4 Cevap

$result = array_splice( $yourArray, 0, 1 );

... Hile yapmak gerekir. Bkz array_splice.

Kullanmak each gibi olabilir:

$b = array(1=>2, 3=>4, 7=>3);
while(1) {
    list($key,$value) = each($b);
    if (empty($key))
        break;
    echo "$key $val\n";
}

each ile dizi yinelemeye son konumunu koruyacaktır.

Ayrıca bu yapabilirdi:

<?php

$arr = array('a' => 'first', 'b' => 'second');

// This is your key,value shift line
foreach($arr as $k => $v) { break; }

echo "Key: $k\nValue: $k";

Bu irade çıktı:

Key: a
Value: first

Ben performansı nasıl emin değilim, bu yüzden bazı profilleme yapmak isteyebilirsiniz, ama bu her şey üzerinde yineleme gerekmez çünkü, büyük diziler için array_keys() daha hızlı olması olasıdır.

Sen tuşu bakabilirsiniz () akımı () veya her bir () alabilir. Onlar için ne sordu yapmak.

Ben aslında sonradan diziden daha fazla anahtar / değer çiftlerini almak niyetinde eğer gerçekten emin değilim. Yani yapmanız gerekebilir başka ne herhangi bir detaya almazsınız.