array_count_values函数实现
来源:互联网 发布:classic动作数据下载 编辑:程序博客网 时间:2024/06/06 19:06
函数array_count_values的实现:
<?php$array = array(1, "hello", 1, "world", "hello");print_r(array_count_values($array));?>
调用内部函数如下:
PHP_FUNCTION(array_count_values) //统计数组中所有值出现的次数{ zval *input, /* Input array */ *entry, /* An entry in the input array */ //输入的数组中的元素 *tmp; HashTable *myht; if (zend_parse_parameters(ZEND_NUM_ARGS(), "a", &input) == FAILURE) { //zend_parse_parameters函数返回success或者FAILURE return; } /* Initialize return array */ array_init(return_value); //初始化一个作为放返回结果的数组 /* Go through input array and add values to the return array */ myht = Z_ARRVAL_P(input); //把输入的数组中的元素放到hashtable中 ZEND_HASH_FOREACH_VAL(myht, entry) { //遍历这个hahtable ZVAL_DEREF(entry); if (Z_TYPE_P(entry) == IS_LONG) { //判断里面的元素是不是IS_LONG类型 if ((tmp = zend_hash_index_find(Z_ARRVAL_P(return_value), Z_LVAL_P(entry))) == NULL) { //在返回的结果数组中查找这个数字,函数返回一个zval结果的值,是一个*retval zval data; ZVAL_LONG(&data, 1); //将&data所指的zval设置为IS_LONG类型,值是l zend_hash_index_update(Z_ARRVAL_P(return_value), Z_LVAL_P(entry), &data); //返回结果数组中加一条并且value为1 } else { Z_LVAL_P(tmp)++; //如果不为空,这个值就要加一 } } else if (Z_TYPE_P(entry) == IS_STRING) { //如果里面的值是字符串 if ((tmp = zend_symtable_find(Z_ARRVAL_P(return_value), Z_STR_P(entry))) == NULL) { //在返回结果这个数组中查找是否有这个字符串 zval data; ZVAL_LONG(&data, 1); zend_symtable_update(Z_ARRVAL_P(return_value), Z_STR_P(entry), &data); } else { Z_LVAL_P(tmp)++; } } else { php_error_docref(NULL, E_WARNING, "Can only count STRING and INTEGER values!"); //报错,值只能是数字或者字符串类型 } } ZEND_HASH_FOREACH_END(); //结束循环}
1 0
- array_count_values函数实现
- array_count_values() 函数
- array_count_values (函数)
- PHP array_count_values() 函数
- PHP array_count_values() 函数
- array_count_values
- array_count_values
- php数组array_combine()函数和array_count_values()函数
- php统计数组中各项的个数用函数array_count_values
- array_count_values.php
- php-Arrays 函数-array_count_values-统计数组中所有值的出现次数
- array_count_values --- 计算数组所有的值
- strtok函数及函数实现
- strtok函数及函数实现
- my_strchr 函数实现 C函数
- 编写函数实现str函数
- 字符串函数_atoi()函数实现
- cat函数系统函数实现
- php快速获取所有的自定义常量用户常量
- JDBC学习总结
- c++仿函数 functor
- Android 可自动换行的单选 RadioGroupEx
- 博客导航
- array_count_values函数实现
- E-MapReduce集群启停HDFS/YARN服务
- JAVA基础
- 程序10--格式化时间
- jquery如何判断滚动条滚到页面底部并执行事件
- ffmpeg编译参数(中文完整)
- java-CAS 原理
- Python基本数据类型相关练习题
- java_过滤HTML标签