2012-07-27 8 views
8

È possibile limitare il numero di membri in un array, ad esempio LIMIT in MySQL? Ad esempio, se ho $array con i membri x e voglio solo restituire i primi 50 di essi, come faccio?Lunghezza limite dell'array in PHP

Devo usare una combinazione di count() e array_slice() oppure esiste un modo più semplice?

+0

Presumo si intende array_slice(), piuttosto che array_splice(); e count() non dovrebbe essere necessario –

+0

Grazie - corretto 'array_slice()'. – Alfo

risposta

22

Utilizzare array_slice dovrebbe fare il trucco.

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

Sì, non utilizzare la giunzione, poiché ciò modificherà l'array di input. –

+0

Grazie - Ho perso i documenti per l'ultimo parametro, e ho pensato che dovevo fare qualcosa di strano con 'count()' e quindi usarlo come parametro in 'array_slice()'. – Alfo

0

Assicurarsi $array dista solo 50 lungo:

array_splice($array, 50); 

o restituire il prima 50:

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

Come più facile vi aspettate che sia? ;)

0

Con l'array di per sé, non c'è modo di limitare il numero di elementi in esso contenuti.

È possibile implementare il proprio metodo per ottenere i primi 50 elementi di un array (o anche i primi 50 dopo un determinato offset) con un ciclo (si consiglia un ciclo perché con gli array associativi, array_splice() non funzionerà):

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: Questa funzione fornisce gli stessi risultati usando array_slice($array, $offset, $limit, true);; il quarto parametro conserva le chiavi nell'array associativo.

+0

'array_slice' ha un quarto parametro' $ preserve_keys = false' per gli array associativi. – complex857

+0

@ complex857 Buona cattura; Ho appena controllato il metodo e confermato (e ho aggiornato la mia risposta per corrispondere). Grazie =] – newfurniturey

4

Con SPL (migliore occupazione di memoria):

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

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

Aggiunto trucco iteratore. – Florent

+1

+1 Mi piace il LimitIterator, anche se non lo definirei un trucco. Forse una caratteristica meno popolare;) – nickb

+0

@nickb non è certo un trucco. Vorrei consigliare a tutti di fare i conti con la miriade di funzioni dell'array * e * le varie classi di iteratori disponibili. – salathe

Problemi correlati