zoukankan      html  css  js  c++  java
  • php内置函数分析array_count_values()

     1 PHP_FUNCTION(array_count_values)
     2 {
     3     zval    *input,        /* Input array */ 
     4             *entry,        /* An entry in the input array */
     5             *tmp;
     6     HashTable *myht;
     7 
     8     if (zend_parse_parameters(ZEND_NUM_ARGS(), "a", &input) == FAILURE) {
     9         return;
    10     }
    11 
    12     /* Initialize return array */
    13     array_init(return_value);
    14 
    15     /* Go through input array and add values to the return array */
    16     myht = Z_ARRVAL_P(input);
    17     // 循环遍历数组
    18     ZEND_HASH_FOREACH_VAL(myht, entry) {
    19         ZVAL_DEREF(entry);
    20         /* 数组元素的值只能是字符串或整数 */
    21         if (Z_TYPE_P(entry) == IS_LONG) { // 数组元素值为整数
    22             if ((tmp = zend_hash_index_find(Z_ARRVAL_P(return_value), Z_LVAL_P(entry))) == NULL) { // 返回数组中不存在该键
    23                 zval data;
    24                 ZVAL_LONG(&data, 1); // 首次出现,+1
    25                 zend_hash_index_update(Z_ARRVAL_P(return_value), Z_LVAL_P(entry), &data); // 添加到返回值数组
    26             } else {
    27                 Z_LVAL_P(tmp)++; // 元素值出现次数+1
    28             }
    29         } else if (Z_TYPE_P(entry) == IS_STRING) { // 数组元素值为字符串
    30             if ((tmp = zend_symtable_find(Z_ARRVAL_P(return_value), Z_STR_P(entry))) == NULL) {
    31                 zval data;
    32                 ZVAL_LONG(&data, 1);
    33                 zend_symtable_update(Z_ARRVAL_P(return_value), Z_STR_P(entry), &data);
    34             } else {
    35                 Z_LVAL_P(tmp)++;
    36             }
    37         } else {
    38             // 数组元素的值非字符串或整数,则报warning错误。
    39             php_error_docref(NULL, E_WARNING, "Can only count STRING and INTEGER values!");
    40         }
    41     } ZEND_HASH_FOREACH_END();
    42 }
  • 相关阅读:
    Tweet信息搜集工具tinfoleak
    Visual Studio 2017为Android APK包签名
    Arduino可穿戴教程之第一个程序——上传运行程序(四)
    基于NMAP日志文件的暴力破解工具BruteSpray
    CSS3边框圆角知识
    渐变的几个效果图
    错误类型
    prompt() 方法
    jQuery 遍历
    jquery的商品首页
  • 原文地址:https://www.cnblogs.com/natian-ws/p/9150215.html
Copyright © 2011-2022 走看看