怎么向php扩展函数中传入一个多维数组? 如题,我在php扩展中定义了一个函数,这个函数需要传入php页面中的一个多维数组作为参数,然后在函数内部做计算。扩展函数是使用c语言写的,一维的情况我大概知道,是使用zval结构体,但是不知道咋解析出来。大家有谁知道,告诉我下啊?!非常感谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你完全可以看一个php自带的函数怎么完成的。以下摘自php-5.3.8\ext\standard\string.c文件,关于implode的PHP_FUNCTION(implode){ zval **arg1 = NULL, **arg2 = NULL, *delim, *arr; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z|Z", &arg1, &arg2) == FAILURE) { return; } if (arg2 == NULL) { if (Z_TYPE_PP(arg1) != IS_ARRAY) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Argument must be an array"); return; } MAKE_STD_ZVAL(delim);#define _IMPL_EMPTY "" ZVAL_STRINGL(delim, _IMPL_EMPTY, sizeof(_IMPL_EMPTY) - 1, 0); SEPARATE_ZVAL(arg1); arr = *arg1; } else { if (Z_TYPE_PP(arg1) == IS_ARRAY) { arr = *arg1; convert_to_string_ex(arg2); delim = *arg2; } else if (Z_TYPE_PP(arg2) == IS_ARRAY) { arr = *arg2; convert_to_string_ex(arg1); delim = *arg1; } else { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid arguments passed"); return; } } php_implode(delim, arr, return_value TSRMLS_CC); if (arg2 == NULL) { FREE_ZVAL(delim); }}其中是你想要的if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z|Z", &arg1, &arg2) == FAILURE) { return;}看了上边代码,就会知道。implode可以使用一个参数,但必须是数组 php 字符串操作 关于资源怎么样转成中文呢? 关于php删除服务器端文件的问题。 想问下大牛怎么看源代码来实习 想要在linux下面写一个电子邮件的发送程序,不知道怎么做,从何处入手 请教个问题 急!!!!!!!!mysql表中date型数据插入格式是什么? 如何防止網頁刷新帶來的問題? php中双引号的用法?? 菜鸟 问下PHP取出MYSQL数据,然后倒置顺序 大家帮我想点子,优化一个算法 数据无法插入到数据库
以下摘自php-5.3.8\ext\standard\string.c文件,关于implode的
PHP_FUNCTION(implode)
{
zval **arg1 = NULL, **arg2 = NULL, *delim, *arr; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z|Z", &arg1, &arg2) == FAILURE) {
return;
}
if (arg2 == NULL) {
if (Z_TYPE_PP(arg1) != IS_ARRAY) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Argument must be an array");
return;
} MAKE_STD_ZVAL(delim);
#define _IMPL_EMPTY ""
ZVAL_STRINGL(delim, _IMPL_EMPTY, sizeof(_IMPL_EMPTY) - 1, 0); SEPARATE_ZVAL(arg1);
arr = *arg1;
} else {
if (Z_TYPE_PP(arg1) == IS_ARRAY) {
arr = *arg1;
convert_to_string_ex(arg2);
delim = *arg2;
} else if (Z_TYPE_PP(arg2) == IS_ARRAY) {
arr = *arg2;
convert_to_string_ex(arg1);
delim = *arg1;
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid arguments passed");
return;
}
}
php_implode(delim, arr, return_value TSRMLS_CC); if (arg2 == NULL) {
FREE_ZVAL(delim);
}
}其中是你想要的
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z|Z", &arg1, &arg2) == FAILURE) {
return;
}看了上边代码,就会知道。implode可以使用一个参数,但必须是数组