php扩展:如何访问php数组
来源:互联网 发布:淘宝一件衣服不同价格 编辑:程序博客网 时间:2024/06/06 02:24
在php扩展中,时常需要接受php类型的数组作为参数,php数组的参数都是zval类型的,并不适合在扩展中方便的使用,一般都要提前转换成c或cpp中的数据类型。首先看一个转换的例子:
上述列子是把php的数组转换成vector<string>的类型。HashPosition 是一个指针,通过zend_hash_internal_pointer_reset_ex( Z_ARRVAL_P( vals ), &pos );方法使得pos指向zval数组的第一个元素,然后通过while循环中的zend_hash_get_current_data_ex( Z_ARRVAL_P( vals ), (void **)&z_val, &pos ) 方法取得pos所指位置的元素值,保存在z_val指针中。
convert_to_string_ex( z_val ),转换z_val中包含的实际数据为字符串,value = Z_STRVAL_PP(z_val) 则获得此字符串的值,然后push_back到valList中。zend_hash_move_forward_ex( Z_ARRVAL_P( vals ), &pos );则移动pos到下一个元素位置。
void convert_to_vector(const zval * vals, vector<string> &valList) {
// create the list to write
HashPosition pos;
zval **z_val = NULL;
string value;
zend_hash_internal_pointer_reset_ex( Z_ARRVAL_P( vals ), &pos );
while ( zend_hash_get_current_data_ex( Z_ARRVAL_P( vals ), (void **)&z_val, &pos ) == SUCCESS ) {
convert_to_string_ex( z_val );
value = Z_STRVAL_PP(z_val);
valList.push_back(value);
zend_hash_move_forward_ex( Z_ARRVAL_P( vals ), &pos );
}
}
// create the list to write
HashPosition pos;
zval **z_val = NULL;
string value;
zend_hash_internal_pointer_reset_ex( Z_ARRVAL_P( vals ), &pos );
while ( zend_hash_get_current_data_ex( Z_ARRVAL_P( vals ), (void **)&z_val, &pos ) == SUCCESS ) {
convert_to_string_ex( z_val );
value = Z_STRVAL_PP(z_val);
valList.push_back(value);
zend_hash_move_forward_ex( Z_ARRVAL_P( vals ), &pos );
}
}
convert_to_string_ex( z_val ),转换z_val中包含的实际数据为字符串,value = Z_STRVAL_PP(z_val) 则获得此字符串的值,然后push_back到valList中。zend_hash_move_forward_ex( Z_ARRVAL_P( vals ), &pos );则移动pos到下一个元素位置。
- php扩展:如何访问php数组
- Fastdfs php扩展访问
- php 如何添加php扩展
- 如何编写PHP扩展
- 如何编写PHP扩展
- 如何编写PHP扩展
- 如何编写php扩展
- 如何编写PHP扩展
- 如何编写PHP扩展
- 如何编写PHP扩展
- 如何编写PHP扩展
- 如何编写PHP扩展
- 如何编写PHP扩展
- 如何编写PHP扩展
- 如何编写PHP扩展
- PHP扩展中如何遍历数组?(ZEND API)
- php扩展返回二维数组
- PHP 扩展返回数组类型
- IBM Rational Rose读书笔记 (5)
- IBM Rational Rose读书笔记 (6)
- how to write a module dumper & disassembler
- 关于双缓冲绘图(上)
- fileUpload控件使用方法介绍(有试例源代码哦!)
- php扩展:如何访问php数组
- 关于双缓冲绘图(下)
- 路边的小摊还是不要吃了……
- ATL的GUI程序设计(2)
- ATL的GUI程序设计(1)
- ATL的GUI程序设计(前言)
- 第一次使用CSDN的Blog
- ATL的GUI程序设计(3)
- Linux下CVS服务器