Ninazu
@Ninazu

PHP Extension как обработать двухмерный массив?

Собственно задача. Создать экстеншен для пыхи, который будет обрабатывать обычный массив данных. Структура входного массива фиксированная. Это массив из двух элементов с плавающей точкой.
print_r(
	test(array(
		array(1.0, 2.0),
		array(1.1, 2.1),
		array(1.2, 2.2),
	))
);


Ну и собственно сам экстеншен
#include "php.h"

PHP_FUNCTION(test);

const zend_function_entry test_functions[] = {
    PHP_FE(test, NULL)
    {NULL, NULL, NULL}
};

zend_module_entry test_module_entry = {
    STANDARD_MODULE_HEADER,       
    "test",                   
    test_functions,       
    NULL,                         
    NULL,                      
    NULL,                         
    NULL,                       
    NULL,                        
    "1.0",                    
    STANDARD_MODULE_PROPERTIES
};

ZEND_GET_MODULE(test)

PHP_FUNCTION(test)
{
	int index=0;
 	zval *arr, **data;
    	HashTable *arr_hash, *coord;
    	HashPosition pointer;

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

	arr_hash = Z_ARRVAL_P(arr);
	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)
	) {
		//Вот тут как бы data - это и есть наш  двухмерный массив. 
		//Как получить доступ к его элементам?
		//coord = Z_ARRVAL_P(data);
		//if ((Z_DVAL( coord[0] ) + Z_DVAL(coord[1])) == 3.2){
			add_index_bool(return_value, index, 1);
		//}
		index++;
	}
}


Если что-то делаю не оптимально, буду рад критике.
  • Вопрос задан
  • 2236 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
11 мая 2024, в 00:19
1000 руб./за проект
10 мая 2024, в 23:51
30000 руб./за проект
10 мая 2024, в 23:33
2500 руб./за проект