1 PHP_FUNCTION(array_sum) 2 { 3 zval *input, 4 *entry, 5 entry_n; 6 7 if (zend_parse_parameters(ZEND_NUM_ARGS(), "a", &input) == FAILURE) { 8 return; 9 } 10 11 // 初始化返回值 12 ZVAL_LONG(return_value, 0); 13 14 // 循环取数组元素(entry) 15 ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(input), entry) { 16 // 跳过数组和对象 17 if (Z_TYPE_P(entry) == IS_ARRAY || Z_TYPE_P(entry) == IS_OBJECT) { 18 continue; 19 } 20 // 数组元素复制 21 ZVAL_COPY(&entry_n, entry); 22 // 数组元素转为数字 23 convert_scalar_to_number(&entry_n); 24 // 数组元素累加 25 fast_add_function(return_value, return_value, &entry_n); 26 } ZEND_HASH_FOREACH_END(); 27 }