Aje*_*ngh 2 php arrays algorithm php-internals
数组和使用什么算法使它比一些循环更快?
是前缀sum/suffix sum还是其他什么?
算法很简单:只需遍历数组并生成元素的总和.而已.在算法方面,没有什么可以说的了.显然,你会有复杂性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优化,您可以在这里查看它的实现.
| 归档时间: |
|
| 查看次数: |
542 次 |
| 最近记录: |