Şöyle bir dizim olsaydı:
$array['foo'] = 400;
$array['bar'] = 'xyz';
Ve anahtarını bilmeden o diziden ilk öğeyi çıkarmak istedim, bunu nasıl yapacağım? Bunun için bir işlev var mı?
Şöyle bir dizim olsaydı:
$array['foo'] = 400;
$array['bar'] = 'xyz';
Ve anahtarını bilmeden o diziden ilk öğeyi çıkarmak istedim, bunu nasıl yapacağım? Bunun için bir işlev var mı?
Yanıtlar:
reset() dizi içinde bir öğeniz varsa size dizinin ilk değerini verir:
$value = reset($array);
Ayrıca FALSEdizinin boş olması durumunda da size verir .
$arr = array(/* stuff */); $val = $arr? reset($arr): /* value to indicate array is empty */;
#PHP <7.3
Eğer dizinin hakkında yeterli bilmiyorsanız (eğer emin ilk anahtar olup olmadığını konum foo veya çubuk daha sonra dizi de ayrıca olmak, belki, belki) boşaltın .
Bu nedenle, özellikle döndürülen değerin boolean YANLIŞ olma ihtimali varsa, kontrol etmek en iyisidir:
$value = empty($arr) ? $default : reset($arr);
Yukarıdaki kod kullanır resetve dolayısıyla yan etkileri vardır (dizinin dahili işaretçisini sıfırlar), bu nedenle dizinin array_sliceilk öğesinin bir kopyasına hızlı bir şekilde erişmek için kullanmayı tercih edebilirsiniz :
$value = $default;
foreach(array_slice($arr, 0, 1) as $value);
Hem anahtarı hem de değeri ayrı ayrı almak istediğinizi varsayarsak , dördüncü parametreyi aşağıdakilere eklemeniz gerekir array_slice:
foreach(array_slice($arr, 0, 1, true) as $key => $value);
İlk öğeyi çift olarak almak için ( key => value):
$item = array_slice($arr, 0, 1, true);
Son öğeyi, anahtarı ve değeri ayrı ayrı almak için basit değişiklik :
foreach(array_slice($arr, -1, 1, true) as $key => $value);
#verim
Dizi gerçekten büyük değilse, aslında ihtiyacınız yoktur array_sliceve tüm anahtar dizisinin bir kopyasını alabilir, ardından ilk öğeyi alabilirsiniz:
$key = count($arr) ? array_keys($arr)[0] : null;
Yine de çok büyük bir diziniz varsa, çağrı çok array_keysdaha fazla zaman ve bellek gerektirecektir array_slice(her iki işlev de dizide yürür, ancak ikincisi gerekli sayıda öğeyi topladığında sona erer - ki bu birdir).
Dikkate değer bir istisna, çok büyük ve kıvrımlı bir nesneye işaret eden ilk anahtara sahip olmanızdır. Bu durumda array_slice, ilk büyük nesneyi kopyalarken array_keysyalnızca anahtarları alır.
#PHP 7.3+
PHP 7.3 itibaren uygular array_key_first()yanı sıra array_key_last(). Bunlar, bir yan etki olarak dizinin dahili durumunu sıfırlamadan ilk ve son anahtarlara verimli bir şekilde erişmek için açıkça sağlanır.
Yani PHP 7.3 ilk beri değer arasında $arrayolan erişilebilir
$array[array_key_first($array)];
Yine de dizinin boş olmadığını kontrol etseniz iyi olur, yoksa bir hata alırsınız:
$firstKey = array_key_first($array);
if (null === $firstKey) {
$value = "Array is empty"; // An error should be handled here
} else {
$value = $array[$firstKey];
}
İlk yinelemede kırılan sahte döngü:
$key = $value = NULL;
foreach ($array as $key => $value) {
break;
}
echo "$key = $value\n";
Veya şunu kullanın each()( uyarı: PHP 7.2.0'dan itibaren kullanımdan kaldırılmıştır ):
reset($array);
list($key, $value) = each($array);
echo "$key = $value\n";
reset()İşlevi yalnızca ilk değerini almak istiyorum.
Birkaç seçenek var. array_shift()ilk öğeyi döndürür, ancak aynı zamanda diziden ilk öğeyi kaldırır.
$first = array_shift($array);
current() varsayılan olarak ilk öğe olan dahili bellek işaretçisinin işaret ettiği dizinin değerini döndürür.
$first = current($array);
İlk öğeye işaret ettiğinden emin olmak istiyorsanız, her zaman kullanabilirsiniz reset().
reset($array);
$first = current($array);
reset()aslında öğeyi döndürüyor, bu nedenle a ile onu takiben $first = current($array)gereksiz.
Sırf başka seçeneklerimiz olması için: reset($arr);dizi işaretçisini yerinde tutmaya çalışmıyorsanız yeterince iyi ve çok büyük dizilerle minimum miktarda ek yük getirir. Bununla ilgili bazı sorunlar var dedi:
$arr = array(1,2);
current($arr); // 1
next($arr); // 2
current($arr); // 2
reset($arr); // 1
current($arr); // 1 !This was 2 before! We've changed the array's pointer.
İşaretçiyi değiştirmeden bunu yapmanın yolu:
$arr[reset(array_keys($arr))]; // OR
reset(array_values($arr));
Bunun yararı $arr[reset(array_keys($arr))];, dizi gerçekten boşsa bir uyarı oluşturmasıdır.
Biz yapabiliriz
$first = reset($array);
Onun yerine
reset($array);
$first = current($array);
Gibi reset()
sıfırlamadan sonra dizinin ilk öğesini döndürür;
Bunun gibi anahtarını bilmeden o diziden ilk öğeyi almak için reset () işlevini kullanın.
$value = array('foo' => 400, 'bar' => 'xyz');
echo reset($value);
çıktı // 400
Bunu deneyebilirsin.
Dizinin ilk değerini almak için: -
<?php
$large_array = array('foo' => 'bar', 'hello' => 'world');
var_dump(current($large_array));
?>
Dizinin ilk anahtarını almak için
<?php
$large_array = array('foo' => 'bar', 'hello' => 'world');
$large_array_keys = array_keys($large_array);
var_dump(array_shift($large_array_keys));
?>
Bunu ilk ve son değeri elde etmek için yapıyorum. Bu da daha fazla değerle çalışır.
$a = array(
'foo' => 400,
'bar' => 'xyz',
);
$first = current($a); //400
$last = end($a); //xyz
PHP 7.3.0'dan başlayarak , dahili işaretçiyi sıfırlamadan yapmak mümkündür. Kullanırdın array_key_first. Dizinizin içinde değerlere sahip olduğundan eminseniz, şunları yapabilirsiniz:
$first = $array[array_key_first($array)];
Daha büyük olasılıkla, dizinin boş olduğu durumu ele almak isteyeceksiniz:
$first = (empty($array)) ? $default : $array[array_key_first($array)];
sadece kullanabilirsiniz $array[0]. sana her zaman ilk öğeyi verecek