Задать вопрос
sajgak
@sajgak

Проблемы новичка с zend API?

При работе с zval в функции никак не получается найти строчный индекс в входном массиве, используя функцию zend_hash_find. Краткий листинг:
PHP_FUNCTION(test){
    HashTable *array1;
    zval **value1;
    char *key1 = "one";
    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "H", &array1) == FAILURE) {
       RETURN_NULL();
    }
    if(zend_hash_find(array1, key1, strlen(key1), (void **)&value1) == FAILURE) {
       RETURN_BOOL(0);
    }
    RETURN_BOOL(1); 
 }


Функция всегда возвращает false, даже когда в входном массиве есть строковой ключ «one».


Заранее спасибо за любую наводку
  • Вопрос задан
  • 2619 просмотров
Подписаться 2 Оценить 1 комментарий
Решения вопроса 1
a_dobkin
@a_dobkin
Пропустил ошибку. вместо strlen(key1), нужно strlen(key1) +1. Иначе не учитывается символ конца строки '\0'
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Lure_of_Chaos
@Lure_of_Chaos
Программист
Пробуйте локализовать проблему, выбирая другие функции с другими параметрами, пробуйте через PHP тоже
Ответ написан
a_dobkin
@a_dobkin
Код рабочий, видимо в функцию, в пространстве пользователя, передаются не корректные данные

<?php
$arr = array('one' => 10, abc => 30, 'two' => 40 );

var_dump(test($arr)); // bool(true)
?>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы