Собственно задача. Создать экстеншен для пыхи, который будет обрабатывать обычный массив данных. Структура входного массива фиксированная. Это массив из двух элементов с плавающей точкой.
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++;
}
}
Если что-то делаю не оптимально, буду рад критике.