Разработка функции PHP extension
1 000 руб. за проект
Необходимо разработать(доработать) функцию 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
Требуется знание Си и навыки написания и компилирования 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
В заказе есть исполнитель
При переводе заказа из архивного в актуальный, текущий исполнитель будет снят с задачи.
Выберите тип сделки
С безопасной сделкой вы всегда сможете вернуть средства, если что-то пойдет не так. С простой сделкой вы самостоятельно договариваетесь с исполнителем об оплате и берете на себя решение конфликтов.