2012-07-27 18 views
8

Ist es möglich, die Anzahl der Mitglieder in einem Array zu begrenzen, wie LIMIT in MySQL? Zum Beispiel, wenn ich $array mit x Mitgliedern habe, und ich nur die ersten 50 von ihnen zurückgeben möchte, wie mache ich das?Länge des Arrays in PHP begrenzen

Sollte ich eine Kombination von count() und array_slice() verwenden, oder gibt es einen einfacheren Weg?

+0

Ich nehme an, Sie meinen array_slice() statt array_splice(); und count() sollte nicht notwendig sein –

+0

Danke - Korrigiert 'array_slice()'. – Alfo

Antwort

22

Verwenden array_slice sollte den Trick tun.

array_slice($array, 0, 50); // same as offset 0 limit 50 in sql 
+0

Ja, verwenden Sie keine Spleißverbindung, da dies Ihr Eingabe-Array verändert. –

+0

Danke - Ich habe die Dokumentation für den letzten Parameter verpasst und angenommen, dass ich etwas mit "count()" komisch machen und dann als Parameter in 'array_slice()' verwenden müsste. – Alfo

0

Stellen Sie sicher, $array nur 50 lang ist:

array_splice($array, 50); 

oder die ersten 50 zurück:

$new_array = array_slice($array, 0, 50); 

Wie einfacher erwartest du es sein? ;)

0

Mit dem Array selbst gibt es keine Möglichkeit, die Anzahl der darin enthaltenen Elemente zu begrenzen.

Sie können Ihre eigene Methode implementieren, um die ersten 50 Elemente eines Arrays (oder sogar die ersten 50 nach einem bestimmten Offset) mit einer Schleife zu erhalten (ich empfehle eine Schleife, da bei assoziativen Arrays array_splice() nicht funktioniert):

function limit($array, $limit, $offset = 0) { 
    $return = array(); 
    $end = ($limit + $offset); 
    $count = 0; 
    foreach ($array as $key => $val) { 
     if ($count++ > $offset) { 
      $return[$key] = $val; 
     } 
     if ($count == $end) break; 
    } 
    return $return; 
} 

EDIT: Diese Funktion stellt die gleichen Ergebnisse wie unter Verwendung array_slice($array, $offset, $limit, true);; Der vierte Parameter behält die Schlüssel im assoziativen Array bei.

+0

'array_slice' hat einen' $ preserve_keys = false' 4. Parameter für assoziative Arrays. – complex857

+0

@ complex857 Guter Fang; Ich habe gerade die Methode nachgeschlagen und bestätigt (und meine Antwort entsprechend angepasst). Danke =] – newfurniturey

4

Mit SPL (bessere Speicherbedarf):

// Using fixed array 
$fixedArray = SplFixedArray::fromArray($array); 
$fixedArray->setSize(min(50, count($array)); 

// Using iterator 
$limitIterator = new LimitIterator(new ArrayIterator($array), 0, 50); 
+0

Iterator Trick hinzugefügt. – Florent

+1

+1 Ich mag den LimitIterator, obwohl ich es keinen Trick nennen würde. Vielleicht ein weniger beliebtes Feature;) – nickb

+0

@nickb ist es sicher kein Trick. Ich würde jedem empfehlen, sich mit den unzähligen Array-Funktionen * und * den verschiedenen verfügbaren Iterator-Klassen vertraut zu machen. – salathe

Verwandte Themen