巅云智能建站平台搭建版(创业流派版)火爆上线,毕生受权!新增:文章智能收罗+全站真静态打包+城市分站+智能小法式+不法词过滤+H5自顺应+智能链词等功效功效概况
赞助文档Help

深切懂得PHP中的count函数

一佰互联网站建造(www.taishanly.com) 宣布日期 2020-04-27 10:44:11 阅读数: 106

在PHP编程中,在遍历数组的时辰常常须要先计较数组的长度作为轮回竣事的判定前提,而在PHP外面对数组的操纵是很频仍的,是以count也算是一个经常利用函数,上面研讨一下count函数的详细完成。

我在github上有对PHP源码更详细的表明。感乐趣的能够围观一下,给个star。PHP5.4源码表明。能够经由进程commit记实查抄已增加的表明。

count

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

count函数计较数组或工具外面的一切元素个数。

对工具来讲,若是你装置了SPL扩大,能够经由进程完成Countable接口来挪用count函数。Countable接口有且唯一一个体例Countable::count(),该体例的前往count()函数的前往值。

参数申明

mode

若是参数mode设为COUNT_RECURSIVE(或1),count()会递归地计较该数组。在计较多维数组的时辰出格有效。

若是第一个参数不是数组或完成Countable接口的工具,count函数将前往1。

注重:count函数能够检测递归避免无穷轮回,但会在碰到无穷递归或获得比希冀值大的时辰前往E_WARNING提醒。

运转示例

通俗利用

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

多维数组

 

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

 数字和字符串

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

通俗工具

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

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

array-like工具

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

完成Countable接口工具

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

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

运转步骤

进入switch语句检测参数范例

若是是NULL,间接前往0

若是是数组,挪用php_count_recursive函数机选数组元素个数

若是是工具,先查抄是不是为数组工具(array-like object),若是是,则计较数组工具的数目

不然,若是工具完成了Countable接口,则挪用Countable的count体例

最初,其余范例比方整型数组或字符串,都前往1。

源码解读

若是是通俗数组,count函数会挪用php_count_recursive函数完成其功效的运转步骤以下:

若是以后hash Bucket被递归拜候的次数大于1,申明反复递归,染回E_WARNING毛病

不然计较以后数组层数的数组元素个数

若是有递归参数选项,则持续递归拜候

若是参数是工具范例,完成时会先判定handler是不是被界说。而handler是PHP内核中工具的布局体,此中包罗有count_elements字段,现实上是一个函数。若是某个工具表现得想数组一样,即凡是说的array-like object,那末就会履行count_elements函数。详细完成是类担当PHP的ArrayObject,并在类外面完成count函数,详细挪用的便是count函数,若是类不完成count函数,则count前往0,不然前往工具的count函数的前往值。

若是是其余的数据范例

1、字符串

2、数字

3、工具分支中两个if判定都为false的情况,即不担当ArrayObject且不完成Countable接口。

这些范例统统前往1。

须要注重的是,若是须要计较的是工具的属性数目,能够先将工具转换成数组,而后挪用count函数。如:

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

小结

阅读count函数的源码进程中,在此中一步卡住了,便是if (Z_OBJ_HT_P(array)->count_elements)这一步,由于一直没法写出进入这个分支的demo,在网上搜刮了良多材料也未果,是以就教了TIPI的reeze,终究获得了想要的谜底。不懂就要问,哈哈。

一佰互联是天下着名建站品牌办事商,咱们有九年、网站建造、网页设想、php开辟和域名注册及假造主机办事经历,供给的办事更是天下着名。最近几年来还整合团队上风自立开辟了可视化多用户”“3.0平台版,拖拽排版网站建造设想,轻松完成pc站、手机微网站、小法式、APP一体化全网营销网站扶植 ,已胜利的为天下上百家收集公司供给自助建站平台搭建办事。

相干消息more

14
04月
网站优化推行的体例有哪些

1、筹办个好域名。①.尽可能在5位数内,固然也不必然,归正要让用户好记。(看小我);②.尽可能用顶级的域名,搜刮排名感受好一点。③.做中文站最好... >>概况

29
04月
利用PHP静态变量当缓存的体例

上面这个PHP的代码实例,功效是赞助用户重置暗码,requestResetPassword是领受用户重置暗码的要求并且做了呼应的查抄。为了更... >>概况

30
04月
PHP获得某段时候区间的时候戳 php按时任

这两天要完成如许功效: 当到达某一前提时,让办事器发短信给用户,数目为多条。 根基思绪:linux 按时扫描,如有知足前提的用户,则发送短信... >>概况

28
04月
微信公家平台接口开辟入门示例

本文实例报告了微信公家平台接口开辟入门示例。分享给大师供大师参考。详细以下:微信公家平台的接口开辟是一个此刻比拟经常利用的功效了,良多的人城市去... >>概况

高端网站扶植

美工统筹SEO,为企业电子商务营销助力!

德律风:

023-85725751
建站

产物

域名注册 假造主机 云办事器 企业邮局
智能建站 APP打包 微站/小法式 创业平台
网站推行 媒体营销 智能收罗 AI机械人
400德律风 短信营销 店销机械人
私家定制 流派网站