私はこのような何かを定義している私のC++ライブラリのPHP拡張を書いています。PHP拡張モジュールのzvalをベクトルに変換するには?私はこのような上記の機能のためのPHPラッパーを書いて、今</p> <pre><code>bool getPids(map<string,string> pidsMap, vector<string> ids); </code></pre> <p>:
ZEND_METHOD(myFInfo, get_pids)
{
zval *idsArray;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a",
&idsArray) == FAILURE)
{
RETURN_NULL();
}
}
は、今私はgetPids()を呼び出したいが、私はC++関数へのベクターとしてidsArrayを渡すために適切な方法を知りません。
ウェブ上で検索した後、zval配列が各値を読み取るために繰り返される例が見つかりました。これを使ってベクトルを作成することができます。
PHP_FUNCTION(hello_array_strings)
{
zval *arr, **data;
HashTable *arr_hash;
HashPosition pointer;
int array_count;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a", &arr) == FAILURE) {
RETURN_NULL();
}
arr_hash = Z_ARRVAL_P(arr);
array_count = zend_hash_num_elements(arr_hash);
php_printf("The array passed contains %d elements", array_count);
for(zend_hash_internal_pointer_reset_ex(arr_hash, &pointer); zend_hash_get_current_data_ex(arr_hash, (void**) &data, &pointer) == SUCCESS;
zend_hash_move_forward_ex(arr_hash, &pointer)) {
if (Z_TYPE_PP(data) == IS_STRING) {
PHPWRITE(Z_STRVAL_PP(data), Z_STRLEN_PP(data));
php_printf("
");
}
}
RETURN_TRUE;
}
これは最善の方法ですか?またはこれを行うためのよりよい方法がありますか?
ありがとうございました! PHPの配列からstd::vector<std::string>
を移入する
ありがとうございました。それが私がやったことです。私は最初にループを使っていましたが、forループは少なくとも2行減らしましたので、forループと一緒に行きました。 –
@Prod答えの左側にある緑のチェックマークをクリックして問題を解決した場合は、この回答を受け入れる必要があります。 – nickb