Я знаю, что найти альтернативы eval()
- общая тема, но я пытаюсь сделать то, что я раньше не делал. Я обрабатываю CSV-файлы с известным форматом, и у меня есть правила для обработки данных в зависимости от доступных исходных столбцов.eval альтернатива правилам обработки в PHP?
Вот упрощенный пример того, что я делаю. В этом примере $linedata
представляет собой одну строку данных из файла CSV. $key["type"]
указывает на столбец Мне нужны данные. Если этот столбец содержит значение «IN», я хочу, чтобы $newcol
настроен на «индивидуальный», иначе «организация».
$key["type"] = 12;
$linedata[12] = 'IN';
$rule = '($linedata[($key["type"])] == "IN" ? "individual" : "organization");';
eval ('$newcol = ' . $rule);
So $rule
хранит логику. Я могу запустить фильтр в массиве $linedata
, чтобы попытаться защитить от вредоносного кода, поступающего из файлов CSV, но мне интересно, есть ли лучший способ хранить и обрабатывать такие правила?
Это мне не ясно, где правила сделаны. Вы пытаетесь оценить код php, полученный из файла csv, или правила, определенные в вашем коде обработки? Если правила определены в вашем коде обработки, почему бы вам просто не использовать функцию? –
Фактически, это поможет увидеть фрагмент данных и обработанный вывод. Кажется, что все, что вы пытаетесь сделать, это сопоставление, и для этого нет необходимости «eval». – netcoder
@netcoder - да, я пытаюсь выполнить сопоставление, но проблема в том, что файлы CSV не всегда имеют столбцы в одном порядке (поэтому я должен определить ключ). Я отредактирую вопрос, чтобы попытаться сделать его более понятным, потому что ответы еще не поставлены. –