Devolver los primeros x elementos de la matriz


139

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


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


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.


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 );
  }

?>

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.


-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]


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.