как преобразовать zval в вектор для расширения php?

я пишу расширение php для моей библиотеки c++, которое определено примерно так:

bool getPids(map<string,string> pidsMap, vector<string> ids);

теперь я пишу оболочку php для вышеуказанной функции, подобной этой.

ZEND_METHOD(myFInfo, get_pids)
{
    zval *idsArray;

    if (zend_parse_parameters( ZEND_NUM_ARGS() TSRMLS_CC, "a",
                                &idsArray ) == FAILURE )
    {
        RETURN_NULL();
    }
}

теперь я хочу вызвать getPids (), но я не знаю, как правильно передать 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;
    }

но это лучший подход? или есть лучший способ сделать это?

Спасибо!

6
задан drew010 6 August 2012 в 18:52
поделиться