8
votes

Obtenez les valeurs minimales et maximales dans une colonne de tableau

J'ai un tableau dans ce format: xxx

est un bon moyen de récupérer les valeurs minimales et maximales de la colonne "Compte" ( 16 et 48 respectivement)?

Je pourrais faire cela en utilisant quelques boucles, mais je me demande s'il peut y avoir une meilleure façon.


3 commentaires

+1 J'ai couru dans ce problème aujourd'hui et je viens de faire une boucle. Curieux sur quelles autres méthodes il y a.


S'il y a une fonction qui, ce faisant, il sera mis en œuvre avec des boucles, donc ce qui est si mauvais en utilisant vos propres fonctions ?!


@Svetlozar Angelov: Pour les fonctions PHP, les boucles seront écrites en C, pas PHP, elles sont donc généralement plus rapides.


7 Réponses :


0
votes

Vous pouvez utiliser le max () et min () fonctions.


1 commentaires

C'est une réponse partielle au mieux.



0
votes

Qu'as-tu fait avec quelques boucles? On est assez assez :)

  1. Obtenez le premier élément, assommer le nombre de dollars à Min et $ max
  2. Itérate sur le reste, comparez le nombre de dollars à chaque $ Min et $ maximum, s'il est plus petit / plus grand, attribuez la nouvelle valeur de comptage

1 commentaires

Cela semble raisonnablement bien expliqué, mais sans un extrait, les chercheurs peuvent ne pas mettre en œuvre votre conseil comme vous avez l'intention. Vous pouvez ou non approuver le premier extrait de ma réponse. Si vous avez une prise différente, ajoutez peut-être un extrait à votre réponse et expliquez pourquoi vous le feriez votre solution unique.



5
votes

Contrairement à ce que d'autres personnes ont affiché, vous ne pouvez pas utiliser le min () / max () fonctionne pour ce problème car ces fonctions ne comprennent pas la source de données (matrice) qui sont transmises. Ces fonctions ne fonctionnent que pour les éléments de tableau scalaire.


commence édition

la raison pour laquelle l'utilisation de min () et max () semble donner la bonne réponse est lié aux tableaux de coulée de type sur les entiers qui sont un comportement non défini :

le comportement de la conversion en entiers est indéfini pour d'autres types. Ne pas compter sur tout comportement observé, comme il peut changer sans préavis.

Ma déclaration ci-dessus sur la coulée de type était fausse. Effectivement min () et max () fonctionne avec des tableaux mais pas dans la façon dont l'OP a besoin de leur travail. Lorsque vous utilisez min () et < un href = "http://de3.php.net/manual/fr/funcuncunk.max.php" rel = "nOfollow noreferrer"> max () avec plusieurs tableaux ou un Les éléments de tableaux sont comparés élément par élément de gauche à droite: xxx

traduit dans le problème de l'OP, cela indique la raison pour laquelle l'utilisation directe de min () et max () semble donner le résultat correct. Les premiers éléments des tableaux sont le ID -Values, donc min () et max () les comparera d'abord, entraînant incidemment le résultat correct, car le le plus bas est celui avec le nombre le plus bas et le Le plus élevé ID est celui avec le nombre le plus élevé .

fin d'exécution


< La bonne façon serait d'utiliser une boucle. xxx


4 commentaires

De la page manuelle pour max $ VAL = max (tableau 2, 4, 8), tableau (2, 5, 7)); // Array (2, 5, 7) . Lis le.


Votre réponse est la bonne mais pas pour la raison pour laquelle vous avez indiqué. Min et max Poignez-les correctement et ne les jetez pas aux entiers, le manuel donne plus de détails.


@MitMaro: Vous avez raison - mon hypothèse ou mon raisonnement sur l'utilisation de tableaux en min () et max () était faux. J'ai édité ma réponse et j'ai supprimé la mauvaise déclaration.


En tant qu'argument "Tinfoil Hat", si le tableau d'entrée est vide, cette réponse retournera des résultats incorrects. Bien sûr, je ne sais pas s'il est possible que l'application de l'OP soit adoptée dans un tableau vide. Ceci est juste une prudence pour les chercheurs.



0
votes

On dirait que vous ne pouvez pas utiliser max () sur un tableau 2D. Il renvoie simplement le plus grand tableau, pas le max () de chaque index (comme mentionné dans quelques réponses).

SO: P>

$count = array();
foreach($arr as $_arr) {
    $count[] = $_arr['count'];
}
var_dump(max($count), min($count));


0 commentaires

-1
votes

Y a-t-il une fonction équivalente à celle-là? (Même sans la capacité Test ) xxx


1 commentaires

Cet extrait ne trouve pas les valeurs min et max dans un tableau de 2 DIM. Ce n'est pas une réponse correcte à cette question.



0
votes

Si la colonne souhaitée est d'abord dans la matrice, vous pouvez utiliser les one-liners suivants:

$max = max(array_map('current', $a));
$min = min(array_map('current', $a));


1 commentaires

Pourquoi appeler array_map () deux fois pour la même valeur de retour? Cela manque d'efficacité et n'est pas d.R.Y.



0
votes

Comme vous pouvez le constater à partir des réponses précédentes, il existe de nombreuses techniques viables à considérer.

Si vous envisagez de meilleures performances, vous devriez alors minimiser le nombre de boucles utilisées et le nombre d'appels de fonction. < / p>

"sous la hotte", les fonctions natales min () et max () itération complètement le tableau qu'ils sont nourris. Donc, si vous utilisez une fonction ou une construction pour boucle sur la matrice d'entrée à 2 dimensions, appelez min () , appelez max () , vous êtes itération du plein Longueur du tableau d'entrée Trois fois séparé.

Considérez cet extrait qui iterate 1 fois:

code: ( démo ) xxx


0 commentaires