Restituzione delle prime x voci dall'array


105

Desidero restituire i primi 5 elementi dall'array. Come posso fare questo?

+4

wtf con downvotes in questa domanda? 15 ott. 092009-10-15 10:14:55

+1

Ho upvoted tutti, poiché ogni risposta è buona. 15 ott. 092009-10-15 10:16:09

217

array_slice restituisce una fetta di un array

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

è il codice che si desidera nel tuo caso per restituire i primi cinque elementi

  0

ma questo non funzionerà con gli array associativi. le chiavi si perdono. 06 giu. 142014-06-06 14:40:47

+3

@ESCOBAR: gli array associativi non hanno necessariamente un ordine, ma mappano solo le chiavi ai valori; quindi "valori da 3 a 7" non ha davvero senso comunque ... 06 giu. 142014-06-06 15:45:54

  0

giusto, ma in questo caso non è correlato all'ordine. sono solo i primi 5 elementi. e non puoi usare array_slice qui. 10 giu. 142014-06-10 16:20:20

+2

@ESCOBAR: non ci sono ** primi ** articoli se non si dispone di un ordine definito. "First" funziona solo se è possibile stabilire quale elemento viene visualizzato prima o dopo altri elementi. Ma solo per il gusto di farlo, puoi riassociare le chiavi con i valori dell'array (anche se non esiste ancora un ordine definito): 'array_combine (array_slice (array_keys ($ array), 0, 5), array_slice ($ array, 0, 5)) ' 10 giu. 142014-06-10 20:07:36

  0

ok si sta prendendo molto stretto con i" primi 5 elementi ". Ma cosa ottieni (o lo chiami) se si itera l'array e lo si interrompe dopo il quinto elemento? Avrai sempre gli stessi 5 oggetti. sai cosa intendo? 12 giu. 142014-06-12 11:44:21

  0

@ESCOBAR: vedi il mio commento precedente. Otterrai i primi 5 tasti + valori. Sembra che gli array associativi in ​​php [abbiano un ordine definito dopo tutto] (http://stackoverflow.com/q/950975/112968) 12 giu. 142014-06-12 12:02:29

  0

Nota che array_slice() NON è passato per riferimento. Quindi, se si volesse sovrascrivere l'array con l'array troncato, sarebbe: '$ array = array_slice ($ array, 0, 5);' 20 gen. 152015-01-20 00:59:15

+1

@darkhorizon: "' array_slice' ** restituisce ** una porzione di un array ". Ma modificherò la mia risposta per renderla un po 'più chiara. 20 gen. 152015-01-20 06:19:48

  0

@ESCOBAR se preserve_keys è impostato su TRUE, i tasti rimangono 12 dic. 162016-12-12 15:06:32


6

array_splice - Rimuove una porzione dell'array e sostituirlo con qualcos'altro:

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

Da manuale di PHP:

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

Se lunghezza viene omesso, rimuove tutto, dalla compensazione fino alla fine dell'array. Se la lunghezza è specificata ed è positiva, allora molti elementi verranno rimossi. Se la lunghezza è specificata ed è negativa, la fine della porzione rimossa sarà quella di molti elementi dalla fine dell'array. Suggerimento: per rimuovere tutto dall'offset alla fine dell'array quando viene specificata anche la sostituzione, utilizzare count ($ input) per la lunghezza.

  0

la sintassi per restituire i primi 5 elementi è array_splice ($ input, 5) 21 mag. 132013-05-21 21:20:22

  0

Grazie, risolto ora. 22 mag. 132013-05-22 12:56:39

  0

@AndrejsCainikovs Come per php.net, "Se la lunghezza è omessa, la sequenza avrà tutto da offset fino alla fine dell'array." Il testo in grassetto della risposta indica esattamente l'opposto. 12 dic. 162016-12-12 15:04:57

  0

@Kalko: probabilmente stai guardando la pagina sbagliata. La mia copia incollata è ancora valida: http://php.net/manual/en/function.array-splice.php 12 dic. 162016-12-12 15:24:38

  0

@AndrejsCainikovs true mate, avevo la pagina per array_slice e non ho notato che la tua risposta era su array_splice. ..il mio male: D 13 dic. 162016-12-13 20:20:06


1

Se si desidera solo per emettere i primi 5 elementi, si dovrebbe scrivere qualcosa di simile:

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

    } 

    } 

?> 

Se si vuole scrivere una funzione che restituisce parte della matrice, è necessario utilizzare array_slice:

<?php 

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

?> 

0

È possibile utilizzare la funzione array_slice, ma si useranno altri valori? o solo i primi 5? perché se userai solo i primi 5 puoi usare LIMIT in SQL.


-3

Un modo più orientato agli oggetti sarebbe quello di fornire un intervallo al metodo # []. Ad esempio:

Dire di volere i primi 3 elementi da un array.

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

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

dici che vuoi il primo x elementi da un array.

numeri [0..x-1]

La cosa bella di questo metodo è se chiedete più oggetti di quelli l'array ha, restituisce semplicemente l'intero array.

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

+3

Ma php non supporta gli intervalli. Sei sicuro di non parlare di rubino o qualcosa del genere? 22 dic. 112011-12-22 22:36:56

+1

"Un modo più orientato agli oggetti"? Questa risposta non ha nulla a che fare con la programmazione orientata agli oggetti. 16 set. 172017-09-16 15:48:29