array_sum在PHP中使用什么算法?

Aje*_*ngh 2 php arrays algorithm php-internals

数组和使用什么算法使它比一些循环更快?

是前缀sum/suffix sum还是其他什么?

Alm*_* Do 5

算法很简单:只需遍历数组并生成元素的总和.而已.在算法方面,没有什么可以说的了.显然,你会有复杂性O(n).

但是,PHP array_sum()是一个已编译的C代码,因此,它将比user-land函数更快.此外,如果您对内部工作方式感兴趣,可以检查array_sum()实施情况:

for (zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(input), &pos);
    zend_hash_get_current_data_ex(Z_ARRVAL_P(input), (void **)&entry, &pos) == SUCCESS;
    zend_hash_move_forward_ex(Z_ARRVAL_P(input), &pos)
) {
    if (Z_TYPE_PP(entry) == IS_ARRAY || Z_TYPE_PP(entry) == IS_OBJECT) {
        continue;
    }
    entry_n = **entry;
    zval_copy_ctor(&entry_n);
    convert_scalar_to_number(&entry_n TSRMLS_CC);
    fast_add_function(return_value, return_value, &entry_n TSRMLS_CC);
}
Run Code Online (Sandbox Code Playgroud)

(我只留下了循环部分).还有fast_add_function()asm优化,您可以在这里查看它的实现.