Maison  >  Article  >  développement back-end  >  Explication détaillée des exemples de fonctions de comptage en PHP

Explication détaillée des exemples de fonctions de comptage en PHP

墨辰丷
墨辰丷original
2018-06-02 09:30:412164parcourir

Cet article présente principalement l'exemple détaillé de la fonction count en PHP. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

En programmation PHP, lors du parcours d'un tableau, il est souvent nécessaire de calculer la longueur du tableau comme condition pour déterminer la fin de la boucle. En PHP, les opérations sur les tableaux sont très fréquentes, donc le nombre l'est également. une fonction couramment utilisée, étudions l'implémentation spécifique de la fonction count.

J'ai des annotations plus détaillées sur le code source PHP sur github. Si vous êtes intéressé, vous pouvez y jeter un œil et lui attribuer une étoile. Annotations du code source PHP5.4. Vous pouvez afficher les annotations ajoutées via l'enregistrement de validation.

count

int count ( mixed $array_or_countable [, int $mode = COUNT_NORMAL ] )

La fonction count compte le nombre de tous les éléments d'un tableau ou d'un objet.

Pour les objets, si vous installez l'extension SPL, vous pouvez appeler la fonction count en implémentant l'interface Countable. L'interface Countable possède une et une seule méthode, Countable::count(), qui renvoie la valeur de retour de la fonction count().

Description du paramètre

mode

Si le mode du paramètre est défini sur COUNT_RECURSIVE (ou 1), count() le fera Calculez récursivement ce tableau. Particulièrement utile lors du calcul de tableaux multidimensionnels.

Si le premier paramètre n'est pas un tableau ou un objet qui implémente l'interface Countable, la fonction count renverra 1.

Remarque : La fonction count peut détecter la récursion pour éviter les boucles infinies, mais renverra une invite E_WARNING lorsqu'elle rencontrera une récursivité infinie ou obtiendra une valeur plus grande que prévu.

Exécuter l'exemple

Application normale

$arr1 = array(1, 2, 3, 4, 5);
$val1 = count($arr1); // 5

Tableau multidimensionnel

$arr2 = array('apple', 'banana', array('cat', 'camel'), 'dog');
$val2_1 = count($arr2); // 4
$val2_2 = count($arr2, 1); // 6

Nombres et chaînes

$str = "hello world";
$int_val = 1;
$val3 = count($str); // 1
$val4 = count($int_val); // 1

Normal Objet

class User {
  private $name;
  private $address;
}

$user = new User();
$val5 = count($user); // 1
$val6 = count((array) $user); // 2

Objet de type tableau

class User extends ArrayObject {
    private $name;

    public function __construct() {
      $this->name = 'hhq';
    }

    public function getName() {
      return $this->name;
    }

    public function count() {
      return 2;
    }

  }

  $user2 = new User();
  $val7 = count($user2); // 2

implémente Objet d'interface dénombrable

class User implements Countable {
    public function count() {
      return 3;
    }
  }

  $user3 = new User();
  $val8 = count($user3); // 3

Étapes d'exécution

Entrez l'instruction switch pour détecter le type de paramètre

S'il est NULL, renvoyez 0 directement

S'il s'agit d'un tableau, appelez la fonction php_count_recursive pour sélectionner automatiquement le numéro d'éléments du tableau

S'il s'agit d'un objet, vérifiez d'abord s'il s'agit d'un objet de type tableau. Si tel est le cas, calculez le nombre d'objets du tableau

Sinon, si l'objet implémente l'interface Countable. , appelez la méthode count de Countable

Enfin, d'autres types tels que les tableaux d'entiers ou les chaînes renvoient 1.

Interprétation du code source

S'il s'agit d'un tableau ordinaire, la fonction count appellera la fonction php_count_recursive pour implémenter sa fonction Les étapes en cours. sont les suivants :

Si le nombre de fois où le compartiment de hachage actuel est accédé de manière récursive est supérieur à 1, cela signifie une récursion répétée et une erreur E_WARNING sera renvoyée

Sinon, le nombre de Les éléments du tableau du niveau actuel du tableau sont calculés

S'il existe une option de paramètre récursif, Ensuite, continuez à accéder de manière récursive

Si le paramètre est un type d'objet, l'implémentation déterminera d'abord si le. le gestionnaire est défini. Le gestionnaire est la structure de l'objet dans le noyau PHP, qui contient le champ count_elements, qui est en fait une fonction. Si un objet se comporte comme un tableau, communément appelé objet de type tableau, alors la fonction count_elements sera exécutée. L'implémentation spécifique est que la classe hérite de ArrayObject de PHP et implémente la fonction count dans la classe. L'appel spécifique est la fonction count, si la classe n'implémente pas la fonction count, count renvoie 0, sinon la valeur de retour de la fonction count de l'objet. est retourné.

S'il s'agit d'autres types de données

1, chaîne

2, numéro

3 , la situation dans laquelle les deux jugements if dans la branche objet sont faux, c'est-à-dire que l'ArrayObject n'est pas hérité et que l'interface Countable n'est pas implémentée.

Ces types renvoient tous 1.

Il est à noter que si vous devez calculer le nombre d'attributs d'un objet, vous pouvez d'abord convertir l'objet en tableau puis appeler la fonction count. Par exemple :

$count_value = count((array) $user);

Résumé : Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'apprentissage de chacun.

Recommandations associées :

phpMéthode d'implémentation du logiciel de chat en version Web

Requête PHP Exemple de test d'interface de socket Explication détaillée

Implémentation PHP de la lecture de fichiers volumineux et de leur affichage

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn