Здравствуйте! Помогите, пожалуйста разобраться. Есть функция, которая ищет в директории файлы, которые заканчиваются .txt и формирует их в выпадающее меню. Здесь всё работает как нужно. Но сейчас задача, добавить в <option значение selected, если переменная $file_name равна переменной $file Проблема заключается в том, что переменная $selected которая находится в <option всегда пустая. Не потому что данного файла нет в директории, а потому что любая переменная после <option будет пустой. В общем, переменную $selected в <option что-то блокирует или очищает значение. Но я не могу разобраться что именно. Прошу помочь PHP: $file_name = "name_of_file"; function my_function(){ $exclude = array("txt"); foreach (new DirectoryIterator('my_folder/') as $file) { if ($file->isFile()) { $extension = pathinfo($file, PATHINFO_EXTENSION); if(in_array($extension, $exclude)) { if(md5($file_name) == md5($file)){$selected = 'selected';} echo " <option ".$selected ." value='".md5($file)."'>$file</option>"; } } } }
В итоге сделал так: PHP: $file_name = "name_of_file"; function my_function(){ $md5file_name = md5($file_name); $exclude = array("txt"); foreach (new DirectoryIterator('my_folder/') as $file) { if ($file->isFile()) { $extension = pathinfo($file, PATHINFO_EXTENSION); if(in_array($extension, $exclude)) { $md5file = md5($file); if($md5file_name == $md5file){ $selected = ' selected'; } else { $selected = ''; } echo "<!--$md5file_name == $md5file--> <option $selected value='$md5file'>$file</option>"; } } } } Меня всё устраивает, но есть один нюанс. Почему-то переменная $file_name = "name_of_file"; прописанная до function my_function() пустая, а если прописать её после function my_function() то всё ок. Почему так происходит и как задать значение переменной до функции?
$file_name определена вне функции, поэтому внутри функции она не видна. Надо добавить строку PHP: globala $file_name; в теле функции.
1. "globala" нет такого в языке; 2. глобальные переменные -- зло, хорошо, когда скрипт из 1-го файла и 20-ти строк, а если 1к файлов, с зоопарком глобалок будет один лишь геморрой.
Все понятно теперь объяснил, сразу все по местам стало) А если серьезно, то аргументы слабоваты. В данном конкретном случае нет никаких скриптов, файлов и тем более 1К файлов. А есть функция и переменная, которая определена вне функции, то есть в глобальном пространстве имен. То есть глобальная переменная. И чтобы ее использовать в пространстве имен функции, ее нужно там определить. Это делается при помощи ключевого слова global. И да, этим нужно пользоваться осторожно, потому что глобальная переменная доступна к изменению внутри функции. Еще ее можно передать в качестве параметра функции. Тогда не будет необходимости юзать глобальную переменную, так как параметр передается по значению. Просто не всегда есть возможность добавлять параметры функции. Надо смотреть по конкретной ситуации.