Somme des valeurs du tableau multidimensionnel par clé sans boucle
J'ai ceci:
Array (
[0] => Array ( [f_count] => 1 [uid] => 105 )
[1] => Array ( [f_count] => 0 [uid] => 106 )
[2] => Array ( [f_count] => 2 [uid] => 107 )
[3] => Array ( [f_count] => 0 [uid] => 108 )
[4] => Array ( [f_count] => 1 [uid] => 109 )
[5] => Array ( [f_count] => 0 [uid] => 110 )
[6] => Array ( [f_count] => 3 [uid] => 111 )
)
Ce dont j'ai besoin est: 7
", qui est la somme de la f_count
colonne.
J'ai été à essayer de comprendre cela pour un couple de heures. J'ai pensé array_sum()
mais pas avec un tableau multidimensionnel. Donc, j'ai essayé de trouver comment isoler le f_count
s par unset()
ou épissage ou quoi que ce soit d'autre, mais chaque solution semble impliquer un foreach
boucle. J'ai sali avec array_map
array_walk
et d'autres, en vain. Je n'ai pas trouvé une fonction qui fonctionne bien avec les tableaux multidimensionnels.
Je suis en cours d'exécution de PHP 5.4.
Quelqu'un peut-il svp me montrer comment la somme de cette colonne sans foreach
boucle?
Si elle aide, le f_count
valeurs ne sera jamais plus élevé que 100
et la uid
valeurs sera toujours plus grand que 100
.
Sinon, si il y a un moyen pour exécuter ma requête différemment, tels que le tableau n'est pas multidimensionnelle, qui serait évidemment de travail.
$query = "SELECT f_count, uid FROM users WHERE gid=:gid";
...
$array = $stmt->fetchAll();
Je suis en utilisant PDO.
source d'informationauteur David
Vous devez vous connecter pour publier un commentaire.
Vous devez le coupler avec
array_map()
pour sélectionner lef_count
première colonne:Bien sûr, à l'interne, elle effectue une double boucle, c'est juste que vous ne le voyez pas à l'intérieur du code. Vous pouvez utiliser
array_reduce()
pour se débarrasser d'une boucle:Cependant, si la vitesse est le seul intérêt,
foreach
reste le plus rapide:C'est grâce à la "localité" des variables que vous utilisez, c'est à dire il n'y a pas d'appels de fonction utilisée pour calculer la somme finale.
En php 5.5+, vous pouvez simplement utilisé
array_column
etarray_sum
comme suit:Oui, il y a un autre moyen d'exécuter votre requête différemment. Vous pouvez utiliser la fonction d'agrégation
SOMME
pour obtenir la somme de tous lesf_count
directement dans votre requête. Vous combinez cela avec$stmt->fetchColumn()
pour obtenir la valeur de la première colonne (qui serait la somme) de la première ligne (qui sera la seule ligne depuis nous avons utilisé une fonction d'agrégation).Voici un exemple de comment vous pourriez faire ceci:
pour ce type de situation boucle foreach est la meilleure option possible, mais si u avez à faire cela pour de multiples reprises sur une seule page, alors u doit mettre de boucle foreach dans une fonction de sorte que votre code est propre
Modifier
Après une recherche beaucoup, j'ai trouvé que
array_column
fonction existe pas en php 5.5 + pour obtenir toutes les valeurs de colonne unique comme un tableau.Pour les utilisateurs ayant de faibles version, Vous pouvez utiliser la fonction suivante et de l'appeler avec un tableau somme si vous souhaitez somme de toutes les valeurs.
Si vous souhaitez obtenir toutes les valeurs de colonne unique puis d'appeler la fonction comme ceci:
Si vous souhaitez somme de toutes les valeurs de colonne unique, puis utilisez le code suivant:
Puisque vous êtes à l'aide de PHP 5.4 avec PDO, il pourrait y avoir plus d'une façon de le faire (disponible en PHP 5.1+):
fetchAll()
fonction avec laPDO::FETCH_COLUMN
comme lefetch_style
et le 0-colonne indexée que le nombre defetch_argument
.Que par votre exemple, il pourrait être:
Maintenant utiliser le
array_sum
fonction pour calculer la somme des valeurs du tableau:Vous pouvez aussi consulter la documentation de PHP à http://php.net/manual/en/pdostatement.fetchall.php
Espère que cette aide, et la performance pourrait être mieux que de le bouclage! Comme déjà mentionné dans d'autres réponses, en PHP 5.5, vous avez la
array_column()
fonction pour obtenir$array_fcount
directement à partir d'un autre tableau.