Retour des x premiers éléments du tableau

139

Je veux retourner les 5 premiers éléments du tableau. Comment puis-je faire ceci?

O ..
la source
5
wtf avec des votes négatifs dans cette question?
SilentGhost
2
J'ai tout voté, car chaque réponse est bonne.
Vili

Réponses:

273

array_slice renvoie une tranche d'un tableau

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

est le code que vous souhaitez dans votre cas pour renvoyer les cinq premiers éléments

tricot
la source
1
mais cela ne fonctionnera pas avec les tableaux associatifs. les clés se perdent.
ESCOBAR
4
@ESCOBAR: les tableaux associatifs n'ont pas forcément d'ordre, ils ne mappent que des clés à des valeurs; donc "valeurs 3 à 7" n'a pas vraiment de sens de toute façon…
knittl
droit, mais dans ce cas, il n’est pas lié à la commande. il s'agit à peu près des 5 premiers éléments. et vous ne pouvez pas utiliser array_slice ici.
ESCOBAR
2
@ESCOBAR: il n'y a pas de premiers éléments si vous n'avez pas d'ordre défini. "Premier" ne fonctionne que si vous savez quel élément vient avant ou après les autres éléments. Mais juste pour le plaisir, vous pouvez re-combiner les clés avec les valeurs du tableau (bien qu'il n'y ait toujours pas d'ordre défini):array_combine(array_slice(array_keys($array), 0, 5), array_slice($array, 0, 5))
knittl
1
@darkhorizon: " array_slice renvoie une tranche d'un tableau". Mais je modifierai ma réponse pour la rendre un peu plus claire.
knittl
9

array_splice - Supprimez une partie du tableau et remplacez-la par autre chose:

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

Depuis le manuel PHP:

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

Si la longueur est omise, supprime tout de l'offset jusqu'à la fin du tableau . Si la longueur est spécifiée et est positive, alors que de nombreux éléments seront supprimés. Si la longueur est spécifiée et est négative, la fin de la partie supprimée sera autant d'éléments à partir de la fin du tableau. Astuce: pour tout supprimer de l'offset jusqu'à la fin du tableau lorsque le remplacement est également spécifié, utilisez count ($ input) pour la longueur.

Andrejs Cainikovs
la source
la syntaxe pour renvoyer les 5 premiers éléments est array_splice ($ input, 5)
aland
@AndrejsCainikovs Selon php.net, "Si la longueur est omise, alors la séquence aura tout depuis le décalage jusqu'à la fin du tableau." Le texte en gras de la réponse indique exactement le contraire.
Kalko
@Kalko: vous avez probablement regardé la mauvaise page. Ma déclaration copiée
Andrejs Cainikovs
@AndrejsCainikovs true mate, j'avais la page pour array_slice et je n'ai pas remarqué que votre réponse concernait array_splice ... mon mauvais: D
Kalko
3

Si vous souhaitez simplement afficher les 5 premiers éléments, vous devez écrire quelque chose comme:

<?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 vous souhaitez écrire une fonction qui renvoie une partie du tableau, vous devez utiliser array_slice:

<?php

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

?>
Anax
la source
0

Vous pouvez utiliser la fonction array_slice, mais allez-vous utiliser une autre valeur? ou seulement les 5 premiers? car si vous n'utilisez que les 5 premiers, vous pouvez utiliser la LIMITE sur SQL.

César
la source
-4

Une manière plus orientée objet serait de fournir une plage à la méthode # []. Par exemple:

Supposons que vous vouliez les 3 premiers éléments d'un tableau.

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

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

Supposons que vous vouliez les x premiers éléments d'un tableau.

nombres [0..x-1]

L'avantage de cette méthode est que si vous demandez plus d'éléments que le tableau n'en a, elle renvoie simplement le tableau entier.

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

Jason
la source
3
Mais php ne prend pas en charge les plages. Êtes-vous sûr de ne pas parler de rubis ou de quelque chose du genre?
Victor Marchuk
2
"Une manière plus orientée objet"? Cette réponse n'a rien à voir avec la programmation orientée objet.
Ducky