Restituisce i primi x elementi dall'array


139

Voglio restituire i primi 5 articoli dall'array. Come posso fare questo?


5
wtf con i voti negativi in ​​questa domanda?
SilentGhost,

2
Ho votato tutto, dal momento che ogni risposta è buona.
Vili,

Risposte:


273

array_slice restituisce una porzione di un array

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

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


1
ma questo non funzionerà con le matrici associative. le chiavi si perdono.
ESCOBAR,

4
@ESCOBAR: le matrici associative non hanno necessariamente un ordine, mappano solo le chiavi ai valori; quindi "i valori da 3 a 7" non hanno davvero senso ...
Knittl,

giusto, ma in questo caso non è correlato all'ordine. si tratta solo dei primi 5 elementi. e non puoi usare array_slice qui.
ESCOBAR,

2
@ESCOBAR: non ci sono primi articoli se non hai un ordine definito. "Primo" funziona solo se puoi sapere quale elemento viene prima o dopo altri elementi. Ma solo per divertimento, puoi ricomporre 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))
knittl

1
@darkhorizon: " array_slice restituisce una porzione di un array". Ma modificherò la mia risposta per renderla un po 'più chiara.
Knittl

9

array_splice - Rimuovi una parte dell'array e sostituiscila con qualcos'altro:

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

Dal manuale di PHP:

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

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


la sintassi per restituire i primi 5 elementi è array_splice ($ input, 5)
aland

@AndrejsCainikovs Secondo php.net, "Se la lunghezza viene omessa, la sequenza avrà tutto dall'offset fino alla fine dell'array." Il testo in grassetto di Answer indica esattamente il contrario.
Kalko,

@Kalko: probabilmente hai visto la pagina sbagliata. La mia dichiarazione copia-incollato è ancora valida: php.net/manual/en/function.array-splice.php
Andrejs Cainikovs

@AndrejsCainikovs, vero amico, avevo una pagina per array_slice e non ho notato che la tua risposta era array_splice ... il mio male: D
Kalko

3

Se vuoi solo produrre i primi 5 elementi, dovresti scrivere qualcosa del tipo:

<?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 desidera scrivere una funzione che restituisce parte dell'array, è necessario utilizzare array_slice:

<?php

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

?>

0

Puoi usare la funzione array_slice, ma utilizzerai altri valori? o solo i primi 5? perché se utilizzerai solo i primi 5 puoi usare il LIMIT su SQL.


-4

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

Supponiamo che tu voglia i primi 3 elementi da un array.

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

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

Supponiamo che tu voglia i primi x elementi da un array.

numeri [0..x-1]

La cosa grandiosa di questo metodo è che se chiedi più elementi di quelli dell'array, 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 ruby ​​o qualcosa del genere?
Victor Marchuk,

2
"Un modo più orientato agli oggetti"? Questa risposta non ha nulla a che fare con la programmazione orientata agli oggetti.
Ducky,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.