| |
|
|
| |
<?
function rubrics_parent( $parent_id = 0,$level = 0 )
{
global $db_options;
static $output = array();
$sql = "SELECT * FROM ".$db_options['table_prefix']."rubrics WHERE parent_id = '".$parent_id."'";
$query = mysql_query( $sql ) or dc_error( 1 );
if ( mysql_num_rows( $query ) == 0 ) return;
$nu_index = count( $output );
while ( $row = mysql_fetch_assoc( $query ) )
{
$output[$nu_index]['value'] = $row['id'];
$output[$nu_index]['text'] = $row['name_rus'];
$nu_level = $level + 1;
$output = rubrics_parent( $row['id'],$nu_level );
}
return $output;
}
?>
|
собственно что хочу - прохожу по всем рубрикам (parent_id - это id родительской рубрики) рекурсией и хочу на выходе иметь некий массив вида
Array
(
[0] => Array
(
[value] => 1
[text] => Главная
)
[1] => Array
(
[value] => 2
[text] => 123
)
)
|
Ан нет - на выходе вобще пусто. Никогда не мог разобраться в этих статик и глобалс, вот похоже время и пришло(( помогите пожалуста! | |
| |
|
|
| |
|
|
| |
для: 1999
(24.02.2007 в 16:59)
| | | . | |
| |
|
|
| |
|
|
| |
для: 1999
(24.02.2007 в 16:59)
| | | Объявите $output глобальным и не возвращайте его значение при помощи return. | |
| |
|
|
| |
|
|
| |
для: cheops
(25.02.2007 в 01:05)
| | | хм... т.е. статичным его делать не надо впринципе?
а как тогда я смогу получить выходной массив $output? Ведь данные, передаваемые в ф-цию с типом global изменяются только в теле самой ф-ции... и возвращать таки что-то надо.. | |
| |
|
|
| |
|
|
| |
для: 1999
(25.02.2007 в 01:36)
| | | Глобальный массив и его содержимое будет доступен и после окончания работы функции. | |
| |
|
|
| |
|
|
| |
для: cheops
(25.02.2007 в 12:23)
| | | ...а значение его не изменится - я только что проверил | |
| |
|
|
| |
|
|
| |
для: 1999
(25.02.2007 в 15:55)
| | | В смысле? Не очень понятно... | |
| |
|
|
| |
|
|
| |
для: cheops
(26.02.2007 в 00:45)
| | | ну есть массив, он существует в основном теле программы
я его в функции объявляю глобальным и изменяю его значение. но после выполнения функции массив этот будет как и был до нее, поскольку изменения идут над копией.. ну как я понимаю | |
| |
|
|
| |
|
|
| |
для: 1999
(26.02.2007 в 01:15)
| | | & все дело в нем... наверно) | |
| |
|
|
| |
|
|
| |
для: 1999
(26.02.2007 в 01:15)
| | | Нет, Вы будете работать именно с этим массивом | |
| |
|
|
| |
|
|
| |
для: 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( 1 );
if ( mysql_num_rows( $query ) == 0 ) 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 выполняется раньше, чем обрабатывается предыдущий запрос - может из-за этого глюки | |
| |
|
|
| |
|
|
| |
для: 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();
);
);
)
)
?>
|
| |
| |
|
|
| |
|
|
| |
для: 1999
(24.02.2007 в 16:59)
| | | return не возвращает переменную, а возвращает значение.
<?
$output=rubrics_parent();
?>
|
| |
| |
|
|
| |
|
|
| |
для: yuri
(26.02.2007 в 14:53)
| | | и??? я непонимаю, в чем сложность написать вместо
$output=rubrics_parent();
|
$output = array();
rubrics_parent(&$output);
|
| |
| |
|
|