Diziden ilk x öğeyi döndürme


139

Diziden ilk 5 öğeyi döndürmek istiyorum. Bunu nasıl yapabilirim?


5
wtf bu soruda downvotes ile?
SilentGhost

2
Her cevabım iyi olduğu için hepsini iptal ettim.
Vili

Yanıtlar:


273

array_slice bir dizinin bir dilimini döndürür

$sliced_array = array_slice($array, 0, 5)

davanızdaki ilk beş öğeyi döndürmek istediğiniz koddur


1
ancak bu ilişkisel dizilerle çalışmaz. anahtarlar kaybolur.
ESCOBAR

4
@ESCOBAR: İlişkilendirilebilir dizilerin bir sırası yoktur, yalnızca anahtarları değerlerle eşler; yani "3'ten 7'ye kadar olan değerler" gerçekten bir anlam ifade etmiyor ...
knittl

ancak bu durumda siparişle ilgisi yoktur. hemen hemen ilk 5 madde. ve burada array_slice kullanamazsınız.
ESCOBAR

2
@ESCOBAR: Eğer tanımlanmış bir siparişiniz yoksa ilk öğe yoktur . "İlk" yalnızca, hangi öğenin diğer öğelerden önce veya sonra geldiğini söyleyebiliyorsanız çalışır. Ama sadece eğlenmek için, anahtarları dizinin değerleri ile yeniden birleştirebilirsiniz (hala tanımlanmış bir düzen olmamasına rağmen):array_combine(array_slice(array_keys($array), 0, 5), array_slice($array, 0, 5))
knittl

1
@darkhorizon: " bir dizi dilim array_slice döndürür ". Ama cevabımı biraz daha açık hale getirmek için düzenleyeceğim.
knittl

9

array_splice - Dizinin bir bölümünü kaldırın ve başka bir şeyle değiştirin:

$input = array(1, 2, 3, 4, 5, 6);
array_splice($input, 5); // $input is now array(1, 2, 3, 4, 5)

PHP kılavuzundan:

array array_splice ( array &$input , int $offset [, int $length = 0 [, mixed $replacement]])

Eğer uzunluk verilmemişse dizinin sonuna ofset, her şeyi kaldırır . Uzunluk belirtilir ve pozitifse, o zaman birçok öğe kaldırılır. Uzunluk belirtilirse ve negatifse, kaldırılan bölümün sonu, dizinin sonundaki birçok öğedir. İpucu: değiştirme belirtildiğinde, dizinin sonuna kadar her şeyi kaldırmak için uzunluk için count ($ input) kullanın.


ilk 5 öğeyi döndürecek sözdizimi array_splice ($ input, 5)
aland

@AndrejsCainikovs php.net'e göre, "Uzunluk atlanırsa, dizi, dizinin sonuna kadar ofsetten her şeye sahip olur." Yanıtlayıcının kalın harfli metni tam tersini belirtir.
Kalko

@Kalko: muhtemelen yanlış sayfaya bakıyorsunuz. Kopyala yapıştırılan ifadem
Andrejs Cainikovs

@AndrejsCainikovs gerçek dostum, array_slice için sayfa vardı ve cevabının array_splice hakkında olduğunu fark etmedim ... benim kötü: D
Kalko

3

Sadece ilk 5 öğenin çıktısını almak istiyorsanız, şöyle bir şey yazmalısınız:

<?php

  if (!empty ( $an_array ) ) {

    $min = min ( count ( $an_array ), 5 );

    $i = 0;

    foreach ($value in $an_array) {

      echo $value;
      $i++;
      if ($i == $min) break;

    }

  }

?>

Dizinin bir bölümünü döndüren bir işlev yazmak istiyorsanız, array_slice kullanmalısınız:

<?php

  function GetElements( $an_array, $elements ) {
    return array_slice( $an_array, 0, $elements );
  }

?>

0

Array_slice işlevini kullanabilirsiniz, ancak başka bir değer kullanacak mısınız? ya da sadece ilk 5? çünkü sadece ilk 5'i kullanacaksanız SQL üzerinde LIMIT kullanabilirsiniz.


-4

Daha nesneye yönelik bir yol, # [] yöntemine bir aralık sağlamak olacaktır. Örneğin:

Bir dizideki ilk 3 öğeyi istediğinizi varsayalım.

sayılar = [1,2,3,4,5,6]

sayılar [0..2] # => [1,2,3]

Bir dizideki ilk x öğeyi istediğinizi varsayalım.

numaraları [0..x-1]

Bu yöntemle ilgili en iyi şey, dizinin sahip olduğundan daha fazla öğe istemeniz, dizinin tamamını döndürmesidir.

sayılar [0..100] # => [1,2,3,4,5,6]


3
Ancak php aralıkları desteklemez. Ruby'den ya da bunun gibi bir şeyden bahsetmediğinden emin misin?
Victor Marchuk

2
"Daha nesneye yönelik bir yol" mu? Bu cevabın nesne yönelimli programlama ile ilgisi yoktur.
Ducky
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.