注册 登录
编程论坛 PHP技术论坛

count()函数的统计

czg123698741 发布于 2009-07-21 01:12, 1870 次点击
请高手们帮一下忙,小弟初次接触PHP。但愿帮我解忧~~~
代码如下:
<?php
$array = array("php" => array("PHP函数参考大全","PHP程序开发范例宝典","PHP数据库系统开发完全手册"),
               "asp" => array("ASP经验技巧宝典")
         );
echo count($array,COUNT_RECURSIVE);
?>

运行结果:6

疑问:
《1》——我不明白所谓的递归统计数组元素的个数是如何的递归啊??我明明看见这是只是4哥元素,它何来统计成6个呢??
《2》——如果将COUNT_RECURSIVE参数去掉,运行就结果是:2;这又是为什么啊??
《3》——请问如何判断PHP里面那些是2维数组、3维数组、4维数组,等等?????(请举例子)

鸣谢各位大哥得留言!!!!!!!!
10 回复
#2
外部三电铃2009-07-21 04:31
跟楼主有同样的疑惑,等待高手
#3
flynet2009-07-21 09:25
我也不是 高手 但我也发表下自己的看法吧
count 函数 中 如果 mode 被设置为 COUNT_RECURSIVE(或 1),则会递归底计算多维数组中的数组的元素个数(也就是你结果的6)。如果不设置 mode 默认为0  。不检测多维数组(数组中的数组)(也就是你的结果2)。
大数组$array 包括 php 和asp 2个数组

[[it] 本帖最后由 flynet 于 2009-7-21 09:26 编辑 [/it]]
#4
flynet2009-07-21 09:29
关于第三个问题 我想没有什么实际意义吧? 可以用循环的方法来判断
#5
flynet2009-07-21 09:36
第三个问题 我在想 是否可以用count()的mode 参数 来 解决 mode=0 是 最外层数组个数 mode=1 是所有的多维数组 个数  那么  只要 mode=1 的 个数 比mode=0的多1个 说明 就是2维了吧  3维的或者4维的 我想 可以采取 对这段代码实行 循环比较 应该是能 出来的 只是我的想法  您也可以根据多维数组的规律考虑下 我说的方法的一个 逻辑
#6
czg1236987412009-07-21 10:50
回复 3楼 flynet
版主你好:
——关于count()函数加上COUNT_RECURSIVE参数怎么在数组中统计出6哥元素啊?我明明看见这是只是4哥元素,它何来统计成6个呢??可以叫一下我如何看出是6个吗???
——如果将COUNT_RECURSIVE参数去掉,运行就结果是:2,这个2就是,大数组$array 包括 php 和asp 2个数组,这样想对吗??
——还有您论述了关于第三个问题,mode参数默认值为0,是COUNT_RECURSIVE(或 1)此参数的选值。书上是这么定义二维数组的:【一个数组的元素如果是一个一维数组,则成这个数组是二维数组】。这是书中的相应例子:
<?php
$str = array (
     "书籍"=>array ("文学","历史","地理"),
 "体育用品"=>array ("m"=>"足球","n"=>"篮球"),
 "水果"=>array ("橙子",8=>"葡萄","苹果") );
print_r ( $str) ;
?>
但是我怎么看都好像是三维数组吧!!??我学过C#所以不懂得什么是【指针】,请不要见怪!
#7
dws07062009-07-21 10:51
<?php
$array = array("php" => array("PHP函数参考大全","PHP程序开发范例宝典","PHP数据库系统开发完全手册"),
               "asp" => array("ASP经验技巧宝典")
         );
echo count($array,COUNT_RECURSIVE);
?>

运行结果:6

第一个问题:
递归就是每次运行都会调用自己,直到遍历完毕。
首先遍历的是外面的数组array得出有两个元素("php","asp")
再遍历php数组和asp数组得出的是四个元素 (("PHP函数参考大全","PHP程序开发范例宝典","PHP数据库系统开发完全手册"),("ASP经验技巧宝典"))
然后2+4=6

第二个问题:
COUNT_RECURSIVE参数去掉,不会去递归,调用一次就完咯,也就是遍历两个数组就结束,所以结果等于2

第三个问题:
可以理解为:一维就是数组,二维就是数组中的数组.......

嘻嘻,献丑咯

[[it] 本帖最后由 dws0706 于 2009-7-21 10:57 编辑 [/it]]
#8
flynet2009-07-21 11:49
回复 6楼 czg123698741
关于 前2个问题 你需要 仔细看一下 count() 函数的用法 在教程中有详细的说明 你应该会明白 我说的没错  关于第三个问题 着实我没那么做过所以我只能和你讨论
#9
flynet2009-07-21 11:52
<?php
$str = array (
     "书籍"=>array ("文学","历史","地理"),
"体育用品"=>array ("m"=>"足球","n"=>"篮球"),
"水果"=>array ("橙子",8=>"葡萄","苹果") );
print_r ( $str) ;
?>  你的 这个 例子 的确是 2维数组 因为 大数组 是 书籍,体育用品,水果  而 这3个 都是由 数组组成的 array ("文学","历史","地理"),array ("m"=>"足球","n"=>"篮球"),array ("橙子",8=>"葡萄","苹果") ); 这3个 对吧 但是 里面的 文学 之类 都只是元素 并不是 数组,"m"=>"足球" 这样的元素的意思 我想我不说你也该明白 所以他是二维的
#10
nuciewth2009-07-22 21:04
——关于count()函数加上COUNT_RECURSIVE参数怎么在数组中统计出6哥元素啊?我明明看见这是只是4哥元素,它何来统计成6个呢??可以叫一下我如何看出是6个吗???
递归的计算所用元素的个数,二维数组中的每一行也是作为二维数组的元素,所以它要回递归计数。所以过程应该是1+3+1+1=6
——如果将COUNT_RECURSIVE参数去掉,运行就结果是:2,这个2就是,大数组$array 包括 php 和asp 2个数组,这样想对吗??我也是这样理解的
——还有您论述了关于第三个问题,mode参数默认值为0,是COUNT_RECURSIVE(或 1)此参数的选值。书上是这么定义二维数组的:【一个数组的元素如果是一个一维数组,则成这个数组是二维数组】。这是书中的相应例子:
<?php
$str = array (
     "书籍"=>array ("文学","历史","地理"),
"体育用品"=>array ("m"=>"足球","n"=>"篮球"),
"水果"=>array ("橙子",8=>"葡萄","苹果") );
print_r ( $str) ;
?>
但是我怎么看都好像是三维数组吧!!??我学过C#所以不懂得什么是【指针】,请不要见怪!
PHP里面的数组元素有键值的概念,可以通过下标来访问元素,也可以通过键值来访问,都是唯一标示数组元素的值。所以key==>value。貌似也没有直接牵扯到指针。
#11
SkyGull2009-07-23 14:20
第一第二个问题你们都讨论得很透彻了,呵呵

关于第三个问题.
完全可以自己写个递归函数判断就可以了!
1