我开始swig
和php
工作,我想返回std::vector<std::string>
我php
code.I有试试这个(所有的编译工作)。痛饮转换矢量<std::string>原生PHP数组
我痛饮文件:
%module example
%include <std_string.i>
%include <std_vector.i>
%{
extern std::vector<std::string> testSwig(const char *path);
%}
//try here to convert vector to native php array
%typemap(out) const std::vector<std::string> & {
array_init($result);
Array::const_iterator i = $1->begin();
Array::const_iterator e = $1->end();
for(; i != e; ++i) {
zval * data;
MAKE_STD_ZVAL(data);
ZVAL_STRINGL(data, (char*)i->c_str(), i->size(), 1);
zend_hash_next_index_insert(HASH_OF($result), &data, sizeof(zval *), NULL);
}
}
extern std::vector<std::string> testSwig(const char *path);
我的cpp文件:
#include <iostream>
#include <vector>
std::vector<std::string> testSwig(const char *path)
{
std::vector<std::string> v;
v.push_back("test 1");
v.push_back("test 2");
v.push_back("try vector");
return v;
}
而且finaly我的PHP文件来试试这个:
<?php
echo '<pre>';
echo print_r(testSwig('try arg'));
echo '</pre>';
?>
我的问题是,我的转换std::vector
到php
数组不起作用;当我使我的print_r
我有这样的结果:resource(1) of type (_p_std__vectorT_std__string_t)
您定位的是哪个版本的PHP? – Flexo
PHP版本5.6 @Flexo – simon