Zwracanie pierwszych x elementów z tablicy


105

Chcę zwrócić pierwsze 5 elementów z tablicy. Jak mogę to zrobić?

+4

wtf z downvotes w tym pytaniu? 15 paź. 092009-10-15 10:14:55

+1

Zmieniłem wszystko, ponieważ każda odpowiedź jest dobra. 15 paź. 092009-10-15 10:16:09

217

array_slice zwraca kawałek tablicy

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

jest kod, który ma w Twoim przypadku, aby powrócić pierwszych pięciu elementów

  0

, ale to nie zadziała z tablicami asocjacyjnymi. klucze się gubią. 06 cze. 142014-06-06 14:40:47

+3

@ESCOBAR: tablice asocjacyjne niekoniecznie mają porządek, tylko odwzorowują klucze do wartości; więc "wartości od 3 do 7" tak naprawdę nie mają sensu i tak ... 06 cze. 142014-06-06 15:45:54

  0

prawda, ale w tym przypadku nie ma to związku z zamówieniem. to tylko około pierwszych 5 pozycji. i nie można tutaj użyć array_slice. 10 cze. 142014-06-10 16:20:20

+2

@ESCOBAR: nie ma ** pierwszych ** pozycji, jeśli nie masz zdefiniowanego zamówienia. "Pierwszy" działa tylko wtedy, gdy możesz określić, który element pojawia się przed lub po innych elementach. Ale tylko dla zabawy, możesz ponownie połączyć klucze z wartościami tablicy (chociaż wciąż nie ma zdefiniowanej kolejności): tablica_combine (array_slice (array_keys ($ array), 0, 5), array_slice ($ array, 0, 5)) ' 10 cze. 142014-06-10 20:07:36

  0

ok, przyjmujesz to bardzo surowo za pomocą" pierwszych 5 pozycji ". Ale co otrzymujesz (lub wywołujesz), jeśli przerabiasz tablicę i zatrzymujesz ją po piątym elemencie? Będziesz zawsze mieć te same 5 przedmiotów. wiesz co mam na myśli? 12 cze. 142014-06-12 11:44:21

  0

@ESCOBAR: zobacz mój poprzedni komentarz. Dostaniesz pierwszych 5 kluczy + wartości. Wydaje się, że podobne tablice w php [mają ostatecznie zdefiniowaną kolejność] (http://stackoverflow.com/q/950975/112968) 12 cze. 142014-06-12 12:02:29

  0

Zauważ, że array_slice() NIE jest przekazywane przez referencję. Więc jeśli chcesz nadpisać tablicę przy użyciu obciętej tablicy, będzie to: '$ array = array_slice ($ array, 0, 5);' 20 sty. 152015-01-20 00:59:15

+1

@darkhorizon: "' array_slice' ** zwraca ** kawałek tablicy ". Ale zmienię moją odpowiedź, aby była trochę jaśniejsza. 20 sty. 152015-01-20 06:19:48

  0

@ESCOBAR, jeśli preserve_keys ma wartość PRAWDA, klucze pozostają 12 gru. 162016-12-12 15:06:32


6

array_splice - Usuń część tablicy i zastąpić go czymś innym:

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

Z podręcznika PHP:

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

Jeśli długość jest pominięta, usuwa wszystko od przesunięcie 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, to koniec usuniętej części będzie tą liczbą elementów z końca tablicy. Wskazówka: aby usunąć wszystko, od przesunięcia do końca tablicy, gdy jest również określona zamiana, użyj count ($ input) dla długości.

  0

Składnia zwracania pierwszych 5 elementów to array_splice ($ input, 5) 21 maj. 132013-05-21 21:20:22

  0

Dzięki, poprawiono teraz. 22 maj. 132013-05-22 12:56:39

  0

@AndrejsCainikovs Zgodnie z php.net, "Jeśli długość zostanie pominięta, sekwencja będzie zawierała wszystko od przesunięcia aż do końca tablicy." Pogrubiony tekst odpowiedzi brzmi dokładnie odwrotnie. 12 gru. 162016-12-12 15:04:57

  0

@Kalko: prawdopodobnie patrzysz na niewłaściwą stronę. Moje wklejone oświadczenie jest nadal aktualne: http://php.net/manual/en/function.array-splice.php 12 gru. 162016-12-12 15:24:38

  0

@AndrejsCainikovs prawdziwy oficer, miałem stronę dla tablicy_slice i nie zauważyłem twojej odpowiedzi na temat tablicy array_splice. ..mój zły: D 13 gru. 162016-12-13 20:20:06


1

Jeśli chcesz tylko do wyjścia pierwszych 5 elementów, należy 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ę, która zwraca część tablicy, należy użyć array_slice:

<?php 

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

?> 

0

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


-3

Bardziej zorientowanym obiektowo byłoby podanie zakresu dla metody # []. Na przykład:

Powiedzmy, że chcesz pierwsze 3 elementy z tablicy.

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

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

że chcesz pierwszy X elementy z tablicy.

numery [0..x-1]

Wielką zaletą tej metody jest to, jeśli poprosić o więcej przedmiotów niż tablica ma, to po prostu zwraca całą tablicę.

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

+3

Ale php nie obsługuje zakresów. Jesteś pewien, że nie mówisz o rubinach lub czymś w tym stylu? 22 gru. 112011-12-22 22:36:56

+1

"Bardziej zorientowany obiektowo"? Ta odpowiedź nie ma nic wspólnego z programowaniem obiektowym. 16 wrz. 172017-09-16 15:48:29