Может есть возможность считать без регулярок переменные из файла? просто пробелов может быть несколько и перед массивами и перенос строки в значении PHP: <?php $a = '18214'; $b='45754'; $c = '32523'; $d['array'] = '356754'; $e ['array'] = '4277'; $f ['array'] - '3264634 347347347 34634645'; $g ['array'] = '326346'; ?> хочется считать переменные в стандартном виде в массив(например без пробелов array ([0] => $a['array']='1243545' ) или всё таки нужно регулярное писать с символами $ и = ?
регулярка тогда. ни чего не мешает. я думаю как без неё может можно.(чтоб при нестандартных вариантах считалось нормально)
что то я не чего не понял у вас файл php? как вы его читаете? почему просто не включить через include? зачем регулярка если для значений переменных можно использовать trim что бы убрать любые символы с начала или конца? все остальные пробелы не мешают? хоть так PHP: $a [] = 'a'; хоть так PHP: $a [] = 'a'; результат будет один
Вообщем не совсем понял, но может тогда поможет вначале считать файл в строку потом обрезать <?php и ?>, так как я понял они будут не нужны потом разбить $array = explode(';',$file_string); на пары переменная = значение потом разбить по = explose('=', $array_item) потом состряпать из этого ваш массив применив ко всем ключам и значениям trim() или же str_replace с заменой пробелов на ''
ок, спасибо за рассуждение и ответ, так и буду наверно делать, что то похожее изначально думал. но только придётся смотреть несколько вариантов. .т.к может быт и такое например: PHP: $a = '&nbps;<b>tekst</b>'; а тут уже по точки с запятой только нельзя резать, надо по: ';
вот в этом то и проблема, символ = аналогично может встречается т.к. там хтмл попадается или может лучше как то дважды файл прогонять, сначала узнав точно имена переменной, затем уже значение для каждой
PHP: <?php include('file.php'); echo 'Кол-во переменных в файле: ' .count( get_defined_vars()); ?> Но я так полагаю, вам нужен этот код: PHP: <?php $defined_vars = array(); $var_names = array_keys(get_defined_vars()); foreach ($var_names as $var_name) { $defined_vars[$var_name] =& $$var_name; } ?> (Скопировал его с php.net, даже писать не пришлось. Попробуйте когда-нибудь и поискать то, что ищите, а не только спросить. А может даже и ответить на чей-то вопрос.
Это получается PHP lexer в PHP ? Ну если человек сможет написать грамматику LL(k) сам, пусть пишет. Я думаю тогда бы он и вопросом этим тут не задавался. Лично мне нужно приложить массу усилий чтобы это сделать. Конечно если файлы, которые он хочет парсить расписаны по определённым ограничениям и их достаточно много (ограничений), это можно сделать и более простыми способами. Но если там файл core.php какого-нибудь phpBB на ООП, распарсить всё это дело можно только PHP lexer'ом.
решение нашлось такое, хоть и с инклудом: PHP: ob_start(); include 'file.php'; ob_end_clean(); print_r($vars); но опять же, это если в файле все переменные лежат в массиве $vars, мне этот вариант подходит. может кто знает как всё ж все собрать, если вдруг будет не $vars
при чём тут вообще тогда ob_start? с какой целью вы его использовали? это просто функция буферизации вывода
ну да. если в файле изначально вывода нету (а в моём случае нету), то она не нужна. выходит так что если во всех файлах лежат массивы (т.е. одноимённый массив во всех файлах) то можно и с инклудом работать, и каждый раз массив очищать. т.е. с таким вариантом подходит инклуд: PHP: <?php $arr['a'] = '18214'; $arr['b']='45754'; $arr['c'] = '32523'; $arr['d']['array'] = '356754'; $arr['e'] ['array'] = '4277'; $arr['f'] ['array'] - '3264634 347347347 34634645'; $arr['g'] ['array'] = '326346'; ?>
PHP: <?php function get() { include "file.php"; return get_defined_vars(); } echo "<pre>"; print_r(get()); echo "</pre>";
СУПЕР :!: оно самое! get_defined_vars - тож пробовал использовать, но в функцию не ставил. (выдавал все переменные системы) Благодарю Easy! ЗЫ: заглушку всё же поставлю, попадаются файлы с БОМ (