您好,欢迎访问一九零五行业门户网

php扩展开发笔记(5)一些数组操作相关的宏和简单示例

实现类似isset($array[$value]) 功能,php代码如下 error, 2 => warning, 3 => info, 4 => debug, ); publicfunctionsetlevel($level) {if (!isset(self::$levels)) { thrownewexception(level is not allowed); } }}
c 代码如下php_method(slash_log, setlevel) { long level; zval *levels; zend_class_entry *ce; hashtable *levels_ht; ce = z_objce_p(getthis()); if (zend_parse_parameters(zend_num_args() tsrmls_cc, l, &level) == failure) { php_error_docref(null tsrmls_cc, e_warning, invalid argument); return_false; } levels = zend_read_static_property(ce, zend_strl(sl_p_levels), 0 tsrmls_dc); levels_ht = z_arrval_p(levels); if (!zend_hash_index_exists(levels_ht, level)) { php_error_docref(null tsrmls_cc, e_warning, level is not allowed); return_false; } zend_update_property_long(ce, getthis(), zend_strl(sl_p_level), level tsrmls_cc); return_true;}
上面的例子中,主要是使用 zend_hash_index_exists 方法,关于操作 hash table 的有一系列的方法在 zend/zend_hash.h
zend_api int zend_hash_add_empty_element(hashtable *ht, constchar *arkey, uint nkeylength);zend_api int zend_hash_del_key_or_index(hashtable *ht, constchar *arkey, uint nkeylength, ulong h, int flag);zend_api int zend_hash_find(const hashtable *ht, constchar *arkey, uint nkeylength, void **pdata);zend_api int zend_hash_quick_find(const hashtable *ht, constchar *arkey, uint nkeylength, ulong h, void **pdata);zend_api int zend_hash_index_find(const hashtable *ht, ulong h, void **pdata);zend_api int zend_hash_exists(const hashtable *ht, constchar *arkey, uint nkeylength);zend_api int zend_hash_quick_exists(const hashtable *ht, constchar *arkey, uint nkeylength, ulong h);zend_api int zend_hash_index_exists(const hashtable *ht, ulong h);zend_api int zend_hash_move_forward_ex(hashtable *ht, hashposition *pos);zend_api int zend_hash_move_backwards_ex(hashtable *ht, hashposition *pos);zend_api int zend_hash_get_current_key_ex(const hashtable *ht, char **str_index, uint *str_length, ulong *num_index, zend_bool duplicate, hashposition *pos);zend_api int zend_hash_get_current_key_type_ex(hashtable *ht, hashposition *pos);zend_api int zend_hash_get_current_data_ex(hashtable *ht, void **pdata, hashposition *pos);zend_api int zend_hash_update_current_key_ex(hashtable *ht, int key_type, constchar *str_index, uint str_length, ulong num_index, int mode, hashposition *pos);zend_api int zend_hash_get_pointer(const hashtable *ht, hashpointer *ptr);zend_api int zend_hash_set_pointer(hashtable *ht, const hashpointer *ptr);zend_api int zend_hash_sort(hashtable *ht, sort_func_t sort_func, compare_func_t compare_func, int renumber tsrmls_dc);zend_api int zend_hash_compare(hashtable *ht1, hashtable *ht2, compare_func_t compar, zend_bool ordered tsrmls_dc);zend_api int zend_hash_minmax(const hashtable *ht, compare_func_t compar, int flag, void **pdata tsrmls_dc);zend_api int zend_hash_num_elements(const hashtable *ht);zend_api int zend_hash_rehash(hashtable *ht);
以上就介绍了php扩展开发笔记(5)一些数组操作相关的宏和简单示例,包括了方面的内容,希望对php教程有兴趣的朋友有所帮助。
其它类似信息

推荐信息