Retornando os primeiros x itens da matriz


139

Quero retornar os 5 primeiros itens da matriz. Como posso fazer isso?


5
wtf com votos negativos nesta questão?
SilentGhost 15/10/09

2
Votei em tudo, pois cada resposta é boa.
Vili

Respostas:


273

array_slice retorna uma fatia de uma matriz

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

é o código que você deseja no seu caso para retornar os cinco primeiros elementos


1
mas isso não funcionará com matrizes associativas. as chaves se perdem.
ESCOBAR

4
@ ESCOBAR: matrizes associativas não necessariamente têm um pedido, elas apenas mapeiam chaves para valores; assim "valores de 3 a 7" realmente não faz sentido de qualquer maneira ...
knittl

certo, mas neste caso não está relacionado à ordem. trata-se apenas dos 5 primeiros itens. e você não pode usar array_slice aqui.
ESCOBAR

2
@ ESCOBAR: não existem primeiros itens se você não tiver uma ordem definida. "Primeiro" só funciona se você puder dizer qual item vem antes ou depois de outros itens. Mas apenas para se divertir, você pode voltar a combinar as chaves com os valores do array (embora haja ordem ainda não definido):array_combine(array_slice(array_keys($array), 0, 5), array_slice($array, 0, 5))
knittl

1
@arkhorizon: " array_slice retorna uma fatia de uma matriz". Mas vou editar minha resposta para torná-la um pouco mais clara.
knittl

9

array_splice - Remova uma parte da matriz e substitua-a por outra coisa:

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

Do manual do PHP:

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

Se o comprimento for omitido, remove tudo do deslocamento até o final da matriz . Se o comprimento for especificado e for positivo, muitos elementos serão removidos. Se o comprimento for especificado e for negativo, o final da parte removida será o número de elementos do final da matriz. Dica: para remover tudo do deslocamento até o final da matriz quando a substituição também for especificada, use count ($ input) para o comprimento.


a sintaxe para retornar primeiros 5 elementos é array_splice ($ entrada, 5)
aland

@AndrejsCainikovs Conforme php.net, "Se o comprimento for omitido, a sequência terá tudo, desde o deslocamento até o final da matriz." O texto em negrito da resposta indica exatamente o oposto.
Kalko

@ Kalko: você provavelmente olhou para a página errada. Minha declaração de copiar e colar ainda é válida: php.net/manual/en/function.array-splice.php
Andrejs Cainikovs

@AndrejsCainikovs companheiro de verdade, eu tive página para array_slice e não notou a sua resposta estava prestes array_splice ... meu mau: D
Kalko

3

Se você quiser apenas produzir os 5 primeiros elementos, escreva 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;

    }

  }

?>

Se você deseja escrever uma função que retorna parte da matriz, use array_slice:

<?php

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

?>

0

Você pode usar a função array_slice, mas você usará outros valores? ou apenas os 5 primeiros? porque se você usar apenas os 5 primeiros, poderá usar o LIMIT no SQL.


-4

Uma maneira mais orientada a objetos seria fornecer um intervalo para o método # []. Por exemplo:

Digamos que você queira os 3 primeiros itens de uma matriz.

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

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

Digamos que você queira os primeiros x itens de uma matriz.

números [0..x-1]

O melhor deste método é que, se você pedir mais itens do que a matriz, ela simplesmente retornará a matriz inteira.

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


3
Mas o php não suporta intervalos. Tem certeza de que não está falando de rubi ou algo assim?
Victor Marchuk

2
"Uma maneira mais orientada a objetos"? Esta resposta não tem nada a ver com programação orientada a objetos.
Ducky
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.