Функция cot_import_list в Cotonti
Разбор функции cot_import_list
Функция cot_import_list используется для импорта данных из различных источников, причем она позволяет обрабатывать несколько переменных одновременно, применяя фильтры для каждой переменной. Она работает с массивом имен переменных и их соответствующими фильтрами, а также с несколькими источниками данных.
Код функции
/**
* Imports data from the outer world by list of Variable names
* Relies on cot_import function
*
* @param array|string $nameslist List of Variables names to import, can be:<br />
* string 'name1, name2 , ...' - list of variable names comma separated.<br />
* array('name1', 'name2', ...) - list of variable names only.
* In that case $filter parameter must be specified.<br />
* array('name1' => 'TYPE1', 'name2' => 'TYPE2' ,...) - list of variable names with their filter types
* @param string $source Source type: G/GET, P/POST, C/COOKIE, R/REQUEST, PUT, DELETE or D/DIRECT (variable filtering)
* @param array $origindata Array with origin data that will be extended with imported one
* @param string $nameprefix Unified prefix for Variables names
* @param string $filter Filter type, can be set as:<br />
* string 'FLT' - single filter string for all Variables<br />
* string 'FLT1, FLT2, ...' - comma separated string with filters corresponding to Variable names<br />
* array('FLT1', 'FLT2', ...) - array of filters<br />
* Overrides Filter types specified in $nameslist. If passed as list - number of Filters must be equal to count of
* variables names in $nameslist.
*
* @param bool $arrayprefix Use $nameprefix for array fields
* @param int $maxlen Length limit
* @param bool $dieonerror Die with fatal error on wrong input
* @param bool $buffer Try to load from input buffer (previously submitted) if current value is empty
* @return ?array Returns combined array of data or NULL if wrong parameters set
*/
function cot_import_list(
$nameslist = [],
$source = 'P',
$origindata = [],
$nameprefix = '',
$filter = null,
$arrayprefix = false,
$maxlen = 0,
$dieonerror = false,
$buffer = false
) {
$direct = ($source == 'D' || $source == 'DIRECT');
$filter = empty($filter) ? null : $filter;
$nameslist = empty($nameslist) ? [] : $nameslist;
$origindata = (empty($origindata) || !is_array($origindata)) ? [] : $origindata;
if (empty($nameslist)) {
$nameslist = [];
} elseif (!is_array($nameslist)) {
$nameslist = array_map('trim', explode(',', $nameslist));
}
if (!empty($filter) && !is_array($filter)) {
if (strpos($filter, ',') !== false) {
$filter = array_map('trim', explode(',', $filter));
} else {
$filter = array_fill(
0,
sizeof($direct && empty($nameslist) ? $origindata : $nameslist),
$filter
);
}
}
if (!$direct && sizeof($nameslist) == 0) {
// no proper name list
return null;
} elseif (sizeof($nameslist) == 0) {
// direct by origin
if (is_null($filter)) {
return null;
}
foreach ($origindata as $key => $value) {
$origindata[$key] = cot_import($value, 'D', array_shift($filter), $maxlen, $dieonerror);
}
} else {
// namelist exists
$index = array_keys($nameslist);
$index = array_pop($index);
$types_not_defined = (is_numeric($index) && is_int($index));
if (
(is_array($filter) && sizeof($filter) != sizeof($nameslist))
|| ($types_not_defined && is_null($filter))
) {
// can't rely on filter or no filter exists
return null;
} elseif (is_array($filter)) {
$nameslist = array_combine($types_not_defined ? $nameslist : array_keys($nameslist), $filter);
}
foreach ($nameslist as $name => $filtertype) {
$origindata[($arrayprefix) ? $nameprefix . $name : $name] = cot_import(
$direct ? $origindata[$nameprefix . $name] : $nameprefix . $name,
$source,
$filtertype,
$maxlen,
$dieonerror,
$buffer
);
}
}
return $origindata;
}
Описание:
cot_import_list($nameslist, $source, $origindata, $nameprefix, $filter, $arrayprefix, $maxlen, $dieonerror, $buffer)
Параметры:
$nameslist: Список переменных для импорта:
Строка, содержащая через запятую имена переменных.
Массив, в котором значения — имена переменных.
Ассоциативный массив, где ключи — имена переменных, а значения — типы фильтров.
$source: Источник данных, из которого будет происходить импорт (например, 'GET', 'POST', 'COOKIE' и т.д.). По умолчанию используется 'POST'.
$origindata: Массив с исходными данными, в который будут добавляться данные после импорта.
$nameprefix: Префикс, который будет добавлен к именам переменных.
$filter: Тип фильтра, который будет применяться к переменным. Это может быть строка с одним фильтром для всех переменных или массив фильтров для каждой переменной по очереди.
$arrayprefix: Если установлено в true, будет добавлен префикс к массивам.
$maxlen: Ограничение длины для данных.
$dieonerror: Если установлено в true, при ошибке произойдет фатальная ошибка.
$buffer: Если установлено в true, функция будет использовать буферизацию данных.
Логика работы:
Инициализация переменных:
Проверяется параметр $source, чтобы определить, будет ли это прямой доступ к данным или будет использоваться одна из стандартных источников данных (например, $_GET, $_POST).
Проверяется, что список переменных в $nameslist не пуст.
Обработка фильтров:
Если фильтры переданы как строка, она делится на массив с помощью explode().
Если фильтры не переданы, то для каждого имени в списке переменных фильтр по умолчанию применяется ко всем переменным.
Прямой доступ к данным:
Если используется прямой доступ (например, D или DIRECT), то функция обрабатывает данные из массива $origindata напрямую, без использования глобальных массивов.
Обработка с использованием имен переменных:
Если передан список переменных с фильтрами, то для каждой переменной из списка вызывается функция cot_import с соответствующими параметрами. Результаты записываются в массив $origindata.
Возвращение результата:
Функция возвращает массив с результатами импорта, где данные объединены с исходными данными (массив $origindata).
Пример использования:
// Пример использования с массивом переменных и фильтров $names = ['username' => 'TXT', 'age' => 'INT', 'email' => 'TXT']; $data = cot_import_list($names, 'POST', [], 'user_', 'TXT'); // Пример использования с прямым импортом из GET с общим фильтром $names = 'name, age, email'; $data = cot_import_list($names, 'GET', [], '', 'TXT');
Примечания:
Обработка с буфером:
Если в параметре $buffer установлено значение true, то функция будет пытаться загрузить данные из буфера (если они были отправлены ранее).
Поддержка нескольких фильтров:
Функция поддерживает фильтрацию каждого параметра по-разному. Если фильтр не указан для переменной, она будет обработана по умолчанию (например, как строка).
Прямой доступ:
Если необходимо использовать данные из массива, который уже существует (например, переданные данные в $origindata), можно использовать прямой доступ без обращения к глобальным массивам, передав 'D' в параметр $source.
Важные моменты:
Функция cot_import_list является более гибким инструментом для массового импорта и обработки данных, поскольку позволяет работать с несколькими переменными и фильтрами одновременно.
Она также поддерживает различные источники данных, что делает её универсальной в различных сценариях (например, работы с формами или запросами).
Комментарии (0)
Автор контента
Оффлайн
Administrator
Последняя авторизация: 03.08.2026 13:51
- Страница размещена: 21.01.2025 11:40
- Последнее обновление: 21.01.2025 11:40