Question

J'ai un tableau dans ce format:

Array
(
    [0] => Array
        (
            [id] => 117
            [name] => Networking
            [count] => 16
        )

    [1] => Array
        (
            [id] => 188
            [name] => FTP
            [count] => 23
        )

    [2] => Array
        (
            [id] => 189
            [name] => Internet
            [count] => 48
        )

)

Y at-il un bon moyen de récupérer les valeurs minimales et maximales de « count »? Je pourrais le faire en utilisant quelques boucles mais je pensais qu'il peut y avoir une meilleure façon.

Était-ce utile?

La solution

Contrairement à ce que d'autres ont affiché, vous ne pouvez pas utiliser le min() / max() fonctions pour ce problème car ces fonctions ne comprennent pas la structure de données (array) qui sont passés à. Ces fonctions ne fonctionnent que pour des éléments de réseau scalaire.


BEGIN EDIT

La raison pour laquelle l'utilisation de min() max() semblent donner la bonne réponse est liée au type de coulée tableaux à des nombres entiers qui est un comportement non défini :

  

Le comportement de la conversion vers entier   est indéfini pour d'autres types. Ne pas   compter sur un comportement observé, comme   peut changer sans préavis.

Mon énoncé ci-dessus à propos du type de coulée a eu tort. En fait, min() et min() et min() et max() semble donner le bon résultat. Les premiers éléments de réseaux sont les id valeurs, par conséquent min() et max() les comparerons d'abord, ce qui soit dit en passant dans le résultat correct parce que la le plus bas id est celui avec le plus bas et le plus élevé count id est celui qui a le plus count.

FIN EDIT


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

$a = array(
        array('id' => 117, 'name' => 'Networking', 'count' => 16),
        array('id' => 188, 'name' => 'FTP', 'count' => 23),
        array('id' => 189, 'name' => 'Internet', 'count' => 48)
);
$min = PHP_INT_MAX;
$max = 0;
foreach ($a as $i) {
    $min = min($min, $i['count']);
    $max = max($max, $i['count']);
}

Autres conseils

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

Qu'avez-vous fait avec quelques boucles? L'un est assez :)

  1. Obtenir le premier élément, assing le compte à la fois min $ et max $
  2. itérer sur le reste, à chaque compte comparer si petit / grand, min $ et $ max, affecter la nouvelle valeur de comptage

Vous pouvez utiliser les fonctions max / min car ils retourneront un tableau contenant le maximum / minimum de chaque indice. Votre exemple devrait revenir array(189, 'Networking ', 48) pour max. Vous pouvez alors saisir le compte de ce tableau.


Mettre à jour cela ne fonctionne pas comme je l'avais exceptés. L'exemple de page de manuel est trompeur et donne l'exemple sur le résultat correct en utilisant max mais qui est juste une coïncidence.

On dirait que vous ne pouvez pas utiliser max () sur un tableau 2D. Il retourne juste le plus grand tableau, pas au maximum () de chaque indice (comme étant mentionné dans quelques réponses).

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

Y at-il un équivalent construire en fonction pour celui-là? (Même sans le test capacité)

/**
 * extracts a column from a 2D array, with an optional selection over another column
 *
 * @param $aArray     array to extract from
 * @param $aColName   name of the column to extract, ex. 'O_NAME'
 * @param $aColTest   (optional) name of the column to make the test on, ex. 'O_ID'
 * @param $aTest      (optional) string for the test ex. ">= 10", "=='".$toto."'"
 * @return            1D array with only the extracted column
 * @access public
 */

 function extractColFromArray($aArray, $aColName, $aColTest="", $aTest="") {
  $mRes = array();
  foreach($aArray as $row) {
   if (($aColTest == "") || (eval("return " . $row[$aColTest] . $aTest . ";" )) ) {
    $mRes[] = $row[$aColName];
   }
  }
  return $mRes;
 } // extractColFromArray

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

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

trouvera le min / max de id

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top