Rückgabe der ersten x Elemente aus dem Array

139

Ich möchte die ersten 5 Elemente aus dem Array zurückgeben. Wie kann ich das machen?

Ö..
quelle
5
wtf mit downvotes in dieser frage?
SilentGhost
2
Ich habe alle positiv bewertet, da jede Antwort gut ist.
Vili

Antworten:

273

array_slice Gibt einen Slice eines Arrays zurück

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

ist der Code, der in Ihrem Fall die ersten fünf Elemente zurückgeben soll

stricken
quelle
1
Dies funktioniert jedoch nicht mit assoziativen Arrays. Die Schlüssel gehen verloren.
ESCOBAR
4
@ESCOBAR: Assoziative Arrays haben nicht unbedingt eine Reihenfolge, sie ordnen nur Schlüssel Werten zu. "Werte 3 bis 7" macht also sowieso keinen Sinn ...
knittl
richtig, aber in diesem Fall hat es nichts mit der Bestellung zu tun. Es geht nur um die ersten 5 Artikel. und Sie können array_slice hier nicht verwenden.
ESCOBAR
2
@ESCOBAR: Es gibt keine ersten Artikel, wenn Sie keine definierte Reihenfolge haben. "Zuerst" funktioniert nur, wenn Sie erkennen können, welcher Artikel vor oder nach anderen Artikeln kommt. Aber nur zum Spaß können Sie die Schlüssel mit den Werten des Arrays neu kombinieren (obwohl es noch keine definierte Reihenfolge gibt):array_combine(array_slice(array_keys($array), 0, 5), array_slice($array, 0, 5))
knittl
1
@darkhorizon: „ array_slice Returns eine Scheibe eines Arrays“. Aber ich werde meine Antwort bearbeiten, um sie etwas klarer zu machen.
Knittl
9

array_splice - Entfernen Sie einen Teil des Arrays und ersetzen Sie ihn durch etwas anderes:

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

Aus dem PHP-Handbuch:

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

Wenn die Länge weggelassen wird, wird alles vom Versatz bis zum Ende des Arrays entfernt . Wenn die Länge angegeben und positiv ist, werden so viele Elemente entfernt. Wenn die Länge angegeben und negativ ist, besteht das Ende des entfernten Abschnitts aus so vielen Elementen vom Ende des Arrays. Tipp: Um alles vom Versatz bis zum Ende des Arrays zu entfernen, wenn auch das Ersetzen angegeben ist, verwenden Sie count ($ input) für die Länge.

Andrejs Cainikovs
quelle
Die Syntax ersten 5 Elemente zurückzukehren array_splice ($ input, 5)
Aland
@AndrejsCainikovs Laut php.net "Wenn die Länge weggelassen wird, hat die Sequenz alles vom Offset bis zum Ende des Arrays." Der fettgedruckte Text der Antwort sagt genau das Gegenteil aus.
Kalko
@Kalko: Du bist wahrscheinlich auf der falschen Seite. Meine kopierte Erklärung ist noch gültig: php.net/manual/en/function.array-splice.php
Andrejs Cainikovs
@AndrejsCainikovs wahrer Kumpel, ich hatte eine Seite für array_slice und bemerkte nicht, dass Ihre Antwort über array_splice war ... mein schlechtes: D
Kalko
3

Wenn Sie nur die ersten 5 Elemente ausgeben möchten, sollten Sie Folgendes schreiben:

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

    }

  }

?>

Wenn Sie eine Funktion schreiben möchten, die einen Teil des Arrays zurückgibt, sollten Sie array_slice verwenden:

<?php

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

?>
Eine Axt
quelle
0

Sie können die Funktion array_slice verwenden, verwenden Sie jedoch andere Werte? oder nur die ersten 5? Denn wenn Sie nur die ersten 5 verwenden, können Sie das LIMIT unter SQL verwenden.

Cesar
quelle
-4

Eine objektorientiertere Methode wäre die Bereitstellung eines Bereichs für die # [] -Methode. Zum Beispiel:

Angenommen, Sie möchten die ersten 3 Elemente aus einem Array.

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

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

Angenommen, Sie möchten die ersten x Elemente aus einem Array.

Zahlen [0..x-1]

Das Tolle an dieser Methode ist, dass wenn Sie mehr Elemente als das Array anfordern, einfach das gesamte Array zurückgegeben wird.

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

Jason
quelle
3
Aber PHP unterstützt keine Bereiche. Bist du sicher, dass du nicht über Rubin oder so etwas sprichst?
Victor Marchuk
2
"Eine objektorientiertere Art"? Diese Antwort hat nichts mit objektorientierter Programmierung zu tun.
Ducky