Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Статичный или глобальный массив использовать в функции?

Сообщения:  [1-10]   [11-14] 

 
 автор: ZuArt   (26.02.2007 в 15:53)   письмо автору
 
   для: yuri   (26.02.2007 в 14:53)
 

и??? я непонимаю, в чем сложность написать вместо

$output=rubrics_parent();



$output = array();
rubrics_parent(&$output);

   
 
 автор: yuri   (26.02.2007 в 14:53)   письмо автору
 
   для: 1999   (24.02.2007 в 16:59)
 

return не возвращает переменную, а возвращает значение.

<?
$output
=rubrics_parent();
?>

   
 
 автор: ZuArt   (26.02.2007 в 10:35)   письмо автору
 
   для: ZuArt   (26.02.2007 в 10:07)
 

Попробую отрисовать вид массива

<?
// корень
$out = array(
                       [
0] = array( // 1 эл. корня
                                          
Id Id;
                                          
Text Text;
                                          
Ch = array( // массив дочерних элементов
                                                              
[0] = array(
                                                                                 
Id Id;
                                                                                 
Text Text;
                                                                                 
Ch = array();
                                                                                 );
                                                              [
1] = array(
                                                                                 
Id Id;
                                                                                 
Text Text;
                                                                                 
Ch = array();
                                                                                 );
                                                             );
                                         )
                       [
1] = array( // 2 элемент корня
                                          
Id Id;
                                          
Text Text;
                                          
Ch = array( // дочерние элементы
                                                              
[0] = array(
                                                                                 
Id Id;
                                                                                 
Text Text;
                                                                                 
Ch = array();
                                                                                 );
                                                             );
                                         )
                      )
?>

   
 
 автор: ZuArt   (26.02.2007 в 10:07)   письмо автору
 
   для: kasmanaft   (26.02.2007 в 06:23)
 

Попробуйте вот этот код...


<?
$out 
= array();
rubrics_parent(0, &$out);

function 
rubrics_parent($parent_id 0, &$out)
{
  global 
$db_options;

  
$sql "SELECT * FROM ".$db_options['table_prefix']."rubrics WHERE parent_id = '".$parent_id."'";
  
$query mysql_query$sql ) or dc_error);
  if ( 
mysql_num_rows$query ) == ) return;

  
$i 0;
  while ( 
$row mysql_fetch_assoc$query ) )
  {
   
$out[$i]["Id"] = $row["Id"];
   
$out[$i]["Text"] = $row["Text"];
   
// тут просто читаются все свойства из строки, которые надо считать
   
$i++;
 }

 foreach(
$out as $key => $val)
 {
  
$out[$key]["Ch"] = array();
  
rubrics_parent($val["Id"], &$out[$key]["Ch"])
 };
}
?> 


По окончании выполнения получите массив следующей структуры

каждый элемент являенся "хранилищем каждой строки" с доп. "полем" - $arr["Ch"] - в которое заносятся все дочерние элементы такой-же структуры.

А не работать исходная функция может по одной простой причине - рекурсивный вызов функции mysql_query выполняется раньше, чем обрабатывается предыдущий запрос - может из-за этого глюки

   
 
 автор: kasmanaft   (26.02.2007 в 06:23)   письмо автору
 
   для: 1999   (26.02.2007 в 01:15)
 

Нет, Вы будете работать именно с этим массивом

   
 
 автор: Whi-teOoS   (26.02.2007 в 01:39)   письмо автору
 
   для: 1999   (26.02.2007 в 01:15)
 

& все дело в нем... наверно)

   
 
 автор: 1999   (26.02.2007 в 01:15)   письмо автору
 
   для: cheops   (26.02.2007 в 00:45)
 

ну есть массив, он существует в основном теле программы
я его в функции объявляю глобальным и изменяю его значение. но после выполнения функции массив этот будет как и был до нее, поскольку изменения идут над копией.. ну как я понимаю

   
 
 автор: cheops   (26.02.2007 в 00:45)   письмо автору
 
   для: 1999   (25.02.2007 в 15:55)
 

В смысле? Не очень понятно...

   
 
 автор: 1999   (25.02.2007 в 15:55)   письмо автору
 
   для: cheops   (25.02.2007 в 12:23)
 

...а значение его не изменится - я только что проверил

   
 
 автор: cheops   (25.02.2007 в 12:23)   письмо автору
 
   для: 1999   (25.02.2007 в 01:36)
 

Глобальный массив и его содержимое будет доступен и после окончания работы функции.

   

Сообщения:  [1-10]   [11-14] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования