Zwracanie pierwszych x elementów z tablicy

139

Chcę zwrócić pierwsze 5 elementów z tablicy. W jaki sposób mogę to zrobić?

O ..
źródło
5
wtf z głosami przeciw w tym pytaniu?
SilentGhost
2
Głosowałem za wszystkich, ponieważ każda odpowiedź jest dobra.
Vili

Odpowiedzi:

273

array_slice zwraca wycinek tablicy

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

to kod, który ma w twoim przypadku zwrócić pierwszych pięć elementów

knittl
źródło
1
ale to nie zadziała z tablicami asocjacyjnymi. klucze się zgubiły.
ESCOBAR
4
@ESCOBAR: tablice asocjacyjne niekoniecznie mają kolejność, odwzorowują tylko klucze na wartości; więc „wartości od 3 do 7” i tak nie mają sensu…
knittl
racja, ale w tym przypadku nie jest to związane z zamówieniem. chodzi tylko o pierwsze 5 pozycji. i nie możesz tutaj użyć array_slice.
ESCOBAR
2
@ESCOBAR: nie ma pierwszych pozycji, jeśli nie masz zdefiniowanego zamówienia. „Pierwszy” działa tylko wtedy, gdy możesz stwierdzić, który element pojawia się przed innymi elementami lub po nich. Ale dla zabawy możesz ponownie połączyć klucze z wartościami tablicy (chociaż nadal nie ma zdefiniowanej kolejności):array_combine(array_slice(array_keys($array), 0, 5), array_slice($array, 0, 5))
knittl
1
@darkhorizon: " array_slice zwraca wycinek tablicy". Ale zredaguję swoją odpowiedź, aby była trochę jaśniejsza.
knittl
9

array_splice - Usuń część tablicy i zastąp ją czymś innym:

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

Z instrukcji PHP:

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

Jeśli pominięto długość, usuwa wszystko od przesunięcia do końca tablicy . Jeśli długość jest określona i jest dodatnia, to wiele elementów zostanie usuniętych. Jeśli długość jest określona i jest ujemna, koniec usuniętej części będzie odpowiadał liczbie elementów od końca tablicy. Wskazówka: aby usunąć wszystko od przesunięcia do końca tablicy, gdy określono również zamianę, użyj count ($ input) jako długości.

Andrejs Cainikovs
źródło
składnia do zwrócenia pierwszych 5 elementów to array_splice ($ input, 5)
aland
@AndrejsCainikovs Jak na php.net, „Jeśli pominięto długość, sekwencja będzie miała wszystko od przesunięcia do końca tablicy”. Pogrubiony tekst odpowiedzi jest dokładnie odwrotny.
Kalko
@Kalko: prawdopodobnie spojrzałeś na niewłaściwą stronę. Moje wklejone oświadczenie jest nadal aktualne: php.net/manual/en/function.array-splice.php
Andrejs Cainikovs
@AndrejsCainikovs prawdziwy kolega, miałem stronę dla array_slice i nie zauważyłem, że twoja odpowiedź dotyczyła array_splice ... mój błąd: D
Kalko
3

Jeśli chcesz tylko wypisać pierwsze 5 elementów, powinieneś napisać coś takiego:

<?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;

    }

  }

?>

Jeśli chcesz napisać funkcję zwracającą część tablicy, powinieneś użyć array_slice:

<?php

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

?>
Anax
źródło
0

Możesz użyć funkcji array_slice, ale czy użyjesz innych wartości? czy tylko pierwsze 5? ponieważ jeśli użyjesz tylko pierwszych 5, możesz użyć LIMITU w SQL.

Cesar
źródło
-4

Bardziej obiektowym sposobem byłoby podanie zakresu do metody # []. Na przykład:

Powiedzmy, że chcesz pierwsze 3 elementy z tablicy.

liczby = [1, 2, 3, 4, 5, 6]

liczby [0..2] # => [1,2,3]

Powiedzmy, że chcesz pierwszych x elementów z tablicy.

liczby [0..x-1]

Wspaniałą rzeczą w tej metodzie jest to, że jeśli poprosisz o więcej elementów niż ma tablica, po prostu zwróci całą tablicę.

liczby [0..100] # => [1,2,3,4,5,6]

Jason
źródło
3
Ale php nie obsługuje zakresów. Czy na pewno nie mówisz o rubinie czy czymś takim?
Victor Marchuk
2
„Bardziej zorientowany obiektowo”? Ta odpowiedź nie ma nic wspólnego z programowaniem obiektowym.
Ducky,