Разработка функции PHP extension

1 000 руб. за проект
12 сентября 2019, 15:45 • 0 откликов • 56 просмотров
Необходимо разработать(доработать) функцию PHP extension (PHP 7.2.19 ubuntu 18.04.1) для формирования многомерного выходного массива из текстового файла. Функция должна определять типы данных и составлять нужные массивы (index, assoc ; значение - число или строка, целое число и пр. согласно спецификации массивов PHP extension, add_assoc_doubleи т.п.). Не допускать коллизий при формировании массива.

Требуется знание Си и навыки написания и компилирования PHP extension.

Вызов из php:

echo '<pre>';print_r(my_arr ());echo '</pre>';

Результат:

Array

(

[1] => 1

[b] => asd

[c] => Array

(

[d] => cxvb

[d2] => 2cxvb

[i] => Array

(

[f] => hjl

)

)

[asd asd] => asda asdAS

[3] => sdfgdsf

[sdasd] => sdfgdsf

[5] => Array

(

[1] => 1dfgsdfgsdfg

[2] => 2dfgsdfgsdfg fhsdsdf dsfgsdf sdfgsdfg

[3] => 3dfgsdfgsdfg fhsdsdf dsfgsdf sdfgsdfg

)

[dfg] => Array

(

[2] => 2345623452345234

[3] => 3345623452345234

)

)


Как выглядит сама функция. Примерно так, но возможны изменения по согласованию:

PHP_FUNCTION(my_arr)

{

Int line_file_out; // следующая строка файла, если 0 то конец файла

Int line_file_in=1; // запрос на номер строки из файла

Char key[200]; // ключи массива через запятую

Char *value; // значения

Char * name_file; // наименования файла name_file.txt + путь

array_init(return_value); // выходной массив

void Read_file(“name_file”, key, value, line_file_in, line_file_out); // функция считывания построчно из файла данных



while (line_file_out ==0) // считывать файл пока не будет переменной в 0

{

Read_file(“name_file”, key, value, line_file_in, line_file_out); // запуск функции считывания построчно из файла данных.

line_file_in= line_file_out; // запросить следующую строку

// далее формируем выходной массив, что то типа того, но что бы получался многомерный массив, код приведён для примера

add_assoc_string(&temp, key2, value);

add_index_string(&temp, key3, value);

add_assoc_inager(&temp, key4, value);

add_assoc_zval(return_value, key1, &temp);

add_assoc_string(return_value, key1, value);

}

Return;

}



Пример файла name_file.txt: ключи перечисляются через запятую, значение после знака равно

1,text,1=значение

2,text2,2=значение2

3=значение3

4=значение4

Ключ1=значение5

1,text=значение6

И т.д. любые значения ключей и значений, вложенность не должна ограничиваться (в пределах разумного)

Результат работы:

исходник *.c, пример текстового файла с различными комбинациями массива.

Проверка компиляции и работоспособности будет проходить на PHP 7.2.19 ubuntu 18.04.1