Всем доброго времени суток! Т.к. я новичок в пхп, то обращаюсь к вам за помощью: У меня есть пользовательская функция Код (Text): <?php function f1($f) { $q = mysql_query("SELECT categoryID, name FROM table WHERE categoryID NOT IN (127, 151, 285, 268, 265, 1)"); while ($row = mysql_fetch_array($q)) { if ($row[0] > 15) { echo "<h4>".$row[1]."</h4>"; $z["second"] = $row[1]; } else { echo "<h1>".$row[1]."</h1>"; $z["first"] = $row[1]; } } foreach ($z["first"] as $k => $v) { echo $k." - ".$v."<br>"; } } ?> Как мне передать $z["first"] и $z["second"] из функции в общую область видимости или другую функцию??? Заранее спасибо...
$answer[1] = $z["first"]; $answer[2] = $z["second"]; return $answer; Ну, и вызываете тогда: $some = f1($f); Теперь в $some у вас $answer придет.
virus-07 спасибо что помогаешь. Все работает, я еще допер чере global. Но когда в этой функции есть еще например, fputs, то мне выводит помимо нужного результата еще много ошибок ругаясь на этот fputs. Что не так? Код (Text): <?php function f1($f) { $q = mysql_query("SELECT categoryID, name FROM table WHERE categoryID NOT IN (127, 151, 285, 268, 265, 1)"); while ($row = mysql_fetch_array($q)) { if ($row[0] > 15) { fputs($f,"<h4>".$row[0]."-".$row[1]."</h4>\n"); $z["second"] = $row[1]; } else { fputs($f,"<h1>".$row[0]."-".$row[1]."</h1>\n"); $z["first"] = $row[1]; } } foreach ($z["first"] as $k => $v) { echo $k." - ".$v."<br>"; } $answer[1] = $z["first"]; $answer[2] = $z["second"]; } $some = f1($f); ?>
По-порядку: 1) global - зло. используйте как можно реже, если не можете отказаться. 2) конкретно в данном примере можете не передавать значение в массив $answer. Я для примера вам писал. Просто возвращайте $z, если массив инициализируется в функции или ничего не возвращайте, а обращайтесь как массиву откуда удобно, если он инициализирован заранее. 3) признаться, не пользовался никогда fputs. но учитывая, что она пишет что-то в файл, а вы собираетесь туда запихнуть заголовок — вы формируете html. сомнительные действия, признаться =). Что пишет когда ругается? Читайте, переводите, исправляйте )
про $answer я понял... кусок кода который привел в пример, это только для примера, но структура кода подобная. У меня просто в этой функции выолняется запрос к бд и выборка данных, запись некоторых данных в файл. В другой функции тоже запрос с выборкой к бд и запись других данных в этот же файл. Но проблема в том что мне в функции 2 нужны значения определенной переменной из функции 1. Когда я обращаюсь к этой переменной за пределами функции 1, то мне помимо этой переменной происходит обработка всего кода из этой же функции 1 во второй раз, а мне нужна из этой функции только переменная со значением. Поэтому он мне пишет что fputs возвращает пустой рез-т, т.к. код обрабатывается во второй раз. А заголовки и html это я для примера привел...
***Но проблема в том что мне в функции 2 нужны значения определенной переменной из функции 1.*** Вынесите переменную из функций. т.е. $used_by_two_fanctions = array(); // ну, или строка. function one(){} function two(){} Пробежались первой функцией, записали нужное, пробежались второй — прочитали. Или вызывайте вторую функцию из первой, передавая параметр.
Т.к. я новичок, то я не совсем понимаю... Объясни пожалуйста, если есть одна функция в которой выполняется например 2 зароса к бд Код (Text): {?php function f1() { запрос 1; запрос 2; } ?> если я вызаву эту функцию, то выполнится обязательно оба запроса. А если я хочу, чтобы вызывая эту функцию выполнялся только один запрос, например второй, как это сделать? Или такое нереально и надо тогда делать функция 1 {запрос 1}, функция 2 {запрос 2} и вызывать нужную.
Если первый запрос не сгенерирует ошибку, которая остановит выполнение, то да - выполнятся оба запроса. Чтобы вызывался только второй запрос, надо убрать первый. Например, так: Код (Text): function f1($query=1) { if ($query == 1) запрос 1; else запрос 2; } f1('Выполни-ка второй запрос!'); А для того, чтобы вытащить какое-то значение из функции, но не через return, надо передавать параметр по ссылке: http://www.php.net/manual/en/functions.arguments.php