php扩展:如何访问php数组
2007-06-24 18:19
309 查看
在php扩展中,时常需要接受php类型的数组作为参数,php数组的参数都是zval类型的,并不适合在扩展中方便的使用,一般都要提前转换成c或cpp中的数据类型。首先看一个转换的例子:
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 );
}
}
上述列子是把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 );
}
}
上述列子是把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到下一个元素位置。
相关文章推荐
- php扩展模块如何安装
- WIN下如何在PHP扩展里打开php openssl支持?
- 探讨:如何编写PHP扩展
- php 如何解决“您访问的域名有误或网页不存在”
- PHP----------lnmp安装包lnmp1.3-full安装包安装lnmp环境,如何安装PHP扩展
- 如何编写PHP扩展
- Windows下如何修改php.ini的访问路径?
- 如何安装php的扩展bcmath
- PHP的MySQL扩展:PHP访问MySQL的常用扩展函数
- 这篇文章主要介绍了Apache2.4.x版wampserver本地php服务器如何让外网访问及启用.htaccess,需要的朋友可以参考下
- linux如何开启php的oci扩展
- linux中php如何安装CURL扩展方法示例教程
- PHP如何添加内置的扩展
- php大型网站如何提高性能和并发访问
- 如何安装新的PHP扩展模块
- [PHP]如何使用Mobile_Detect来判断访问网站的设备:安卓,平板,电脑
- linux下为已经编译好的php环境添加mysql扩展(php安装完成后如何添加mysql扩展)
- 如何把php项目部署到阿里云服务器window server2012__含公网ip访问时jquery/ajax失效解决办法
- linux/Windows系统如何安装PHP-openssl扩展
- 如何用C语言编写PHP扩展的详解