Devolver los primeros x elementos de la matriz

139

Quiero devolver los primeros 5 elementos de la matriz. ¿Cómo puedo hacer esto?

O ..
fuente
55
¿Qué pasa con los votos negativos en esta pregunta?
SilentGhost
2
He votado a todos, ya que cada respuesta es buena.
Vili

Respuestas:

273

array_slice devuelve una porción de una matriz

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

es el código que desea en su caso para devolver los primeros cinco elementos

knittl
fuente
1
pero esto no funcionará con matrices asociativas. Las llaves se pierden.
ESCOBAR
44
@ESCOBAR: las matrices asociativas no necesariamente tienen un orden, solo asignan claves a valores; así que "valores de 3 a 7" no tiene sentido de todos modos ...
knittl
correcto, pero en este caso no está relacionado con el pedido. Se trata de los primeros 5 artículos. y no puedes usar array_slice aquí.
ESCOBAR
2
@ESCOBAR: no hay primeros elementos si no tiene un orden definido. "Primero" solo funciona si puede saber qué elemento viene antes o después de otros elementos. Pero solo por diversión, puede volver a combinar las claves con los valores de la matriz (aunque todavía no hay un orden definido):array_combine(array_slice(array_keys($array), 0, 5), array_slice($array, 0, 5))
knittl
1
@darkhorizon: " array_slice devuelve una porción de una matriz". Pero editaré mi respuesta para hacerlo un poco más claro.
knittl
9

array_splice - Elimina una parte de la matriz y reemplázala con otra cosa:

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

Del manual de PHP:

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

Si se omite la longitud, elimina todo, desde el desplazamiento hasta el final de la matriz . Si se especifica la longitud y es positiva, se eliminarán muchos elementos. Si se especifica la longitud y es negativa, entonces el final de la porción eliminada será ese número de elementos desde el final de la matriz. Consejo: para eliminar todo, desde el desplazamiento hasta el final de la matriz cuando también se especifica el reemplazo, use count ($ input) para la longitud.

Andrejs Cainikovs
fuente
la sintaxis para devolver los primeros 5 elementos es array_splice ($ input, 5)
aland
@AndrejsCainikovs Según php.net, "Si se omite la longitud, entonces la secuencia tendrá todo, desde el desplazamiento hasta el final de la matriz". El texto en negrita de la respuesta dice exactamente lo contrario.
Kalko
@ Kalko: probablemente has mirado la página incorrecta. Mi declaración copiada
Andrejs Cainikovs
@AndrejsCainikovs verdadero amigo, tenía página para array_slice y no noté que tu respuesta era sobre array_splice ... mi mal: D
Kalko
3

Si solo desea generar los primeros 5 elementos, debe escribir algo como:

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

    }

  }

?>

Si desea escribir una función que devuelva parte de la matriz, debe usar array_slice:

<?php

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

?>
Un hacha
fuente
0

Puede usar la función array_slice, pero ¿usará otros valores? o solo los primeros 5? porque si usará solo los primeros 5, puede usar el LIMIT en SQL.

Cesar
fuente
-4

Una forma más orientada a objetos sería proporcionar un rango al método # []. Por ejemplo:

Supongamos que quiere los primeros 3 elementos de una matriz.

números = [1,2,3,4,5,6]

números [0..2] # => [1,2,3]

Digamos que quiere los primeros x elementos de una matriz.

números [0..x-1]

Lo mejor de este método es que si solicita más elementos de los que tiene la matriz, simplemente devuelve la matriz completa.

números [0..100] # => [1,2,3,4,5,6]

Jason
fuente
3
Pero php no admite rangos. ¿Estás seguro de que no estás hablando de rubí o algo así?
Victor Marchuk
2
¿"Una forma más orientada a objetos"? Esta respuesta no tiene nada que ver con la programación orientada a objetos.
Ducky