Renvoyer d'abord x éléments du tableau


105

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

+4

wtf avec downvotes dans cette question? 15 oct.. 092009-10-15 10:14:55

+1

J'ai upvoted tout, puisque chaque réponse est bonne. 15 oct.. 092009-10-15 10:16:09

217

array_slice retourne une tranche d'un tableau

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

est le code que vous voulez dans votre cas revenir les cinq premiers éléments

  0

mais cela ne fonctionnera pas avec les tableaux associatifs. les clés se perdent. 06 juin. 142014-06-06 14:40:47

+3

@ESCOBAR: les tableaux associatifs n'ont pas nécessairement d'ordre, ils ne mappent que les clés aux valeurs; donc "les valeurs 3 à 7" n'ont pas vraiment de sens quand même ... 06 juin. 142014-06-06 15:45:54

  0

à droite, mais dans ce cas c'est sans lien avec la commande. il s'agit juste des 5 premiers articles. et vous ne pouvez pas utiliser array_slice ici. 10 juin. 142014-06-10 16:20:20

+2

@ESCOBAR: il n'y a pas de ** premier ** article si vous n'avez pas d'ordre défini. "First" ne fonctionne que si vous pouvez dire quel élément vient avant ou après d'autres éléments. Mais juste pour le plaisir, vous pouvez recomposer 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)) ' 10 juin. 142014-06-10 20:07:36

  0

ok vous le prenez très strict avec les" 5 premiers articles ". Mais qu'est-ce que vous obtenez (ou appelez-le) si vous itérez le tableau et l'arrêtez après le 5ème article? Vous aurez toujours les mêmes 5 articles. tu sais ce que je veux dire? 12 juin. 142014-06-12 11:44:21

  0

@ESCOBAR: voir mon commentaire précédent. Il vous obtiendra les 5 premières clés + valeurs. On dirait que les tableaux associatifs en php [ont un ordre défini après tout] (http://stackoverflow.com/q/950975/112968) 12 juin. 142014-06-12 12:02:29

  0

Notez que array_slice() n'est PAS passé par référence. Donc, si vous voulez écraser votre tableau avec le tableau tronqué, ce serait: '$ array = array_slice ($ array, 0, 5);' 20 janv.. 152015-01-20 00:59:15

+1

@darkhorizon: "' array_slice' ** renvoie ** une tranche d'un tableau ". Mais je vais éditer ma réponse pour la rendre un peu plus claire. 20 janv.. 152015-01-20 06:19:48

  0

@ESCOBAR si preserve_keys est défini sur TRUE, les clés restent 12 déc.. 162016-12-12 15:06:32


6

array_splice - Retirez une partie du tableau et le remplacer par quelque chose d'autre:

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

De manuel PHP:

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

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

  0

la syntaxe pour retourner les 5 premiers éléments est array_splice ($ input, 5) 21 mai. 132013-05-21 21:20:22

  0

Merci, fixe maintenant. 22 mai. 132013-05-22 12:56:39

  0

@AndrejsCainikovs Selon php.net, "Si length est omis, alors la séquence aura tout depuis offset jusqu'à la fin du tableau." Le texte en gras de la réponse indique exactement le contraire. 12 déc.. 162016-12-12 15:04:57

  0

@Kalko: vous avez probablement regardé la mauvaise page. Mon instruction copiée-collée est toujours valide: http://php.net/manual/en/function.array-splice.php 12 déc.. 162016-12-12 15:24:38

  0

@AndrejsCainikovs true mate, j'avais une page pour array_slice et je n'ai pas remarqué ta réponse était sur array_splice. ..mon mauvais: D 13 déc.. 162016-12-13 20:20:06


1

Si vous voulez juste pour sortir les 5 premiers éléments, vous devriez é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 voulez é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); 
    } 

?> 

0

Vous pouvez utiliser la fonction array_slice, mais utiliserez-vous d'autres valeurs? ou seulement les 5 premiers? car si vous n'utilisez que les 5 premiers, vous pouvez utiliser la LIMIT sur SQL.


-3

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

Dites que vous voulez les 3 premiers éléments d'un tableau.

numéros = [1,2,3,4,5,6]

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

Dites que vous voulez le premier x éléments d'un tableau.

numéros [0..X-1]

La grande chose au sujet de cette méthode est que si vous demandez plus d'éléments que le tableau a, il retourne simplement le tableau entier.

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

+3

Mais php ne prend pas en charge les plages. Êtes-vous sûr de ne pas parler de rubis ou de quelque chose comme ça? 22 déc.. 112011-12-22 22:36:56

+1

"Une manière plus orientée objet"? Cette réponse n'a rien à voir avec la programmation orientée objet. 16 sept.. 172017-09-16 15:48:29