неработает массив в подпрограмме

неработает массив в подпрограмме

Добрый день..

есть вот такой кусок программы..

$depth = 0;
$tree = array();
$tree['name'] = "root";
$stack[] = &$tree;

function startElement($parser, $name, $attrs) {
global $depth;
global $stack;
global $tree;

$element = array();
foreach ($attrs as $key => $value) {
$element[strtolower($key)]=$value;
}

end($stack);
$stack[key($stack)][strtolower($name)] = &$element;
$stack[strtolower($name)] = &$element;

$depth++;
}

если программу (целиком) запускать прямо, в виде отдельного php файла, то все работает нормально...

как только я пытаюсь ее оформить как функцию,

function parsexml () {

$depth = 0;
$tree = array();
$tree['name'] = "root";
$stack[] = &$tree;

function startElement($parser, $name, $attrs) {
global $depth;
global $stack;
global $tree;

$element = array();
foreach ($attrs as $key => $value) {
$element[strtolower($key)]=$value;
}

end($stack); // эта строка на которую грешит php
$stack[key($stack)][strtolower($name)] = &$element;
$stack[strtolower($name)] = &$element;

$depth++;
}

... и далее...


то при запуске появляется ошибка
end(): Passed variable is not an array or object in

т.е. как я понял , что переменная stack не является массивом

global $stack; - в функциях как то поиному работают ?

помогите справиться с проблемой...
 

Фанат

oncle terrible
Команда форума
бред какой-то.
в кучу навалены и передача по ссылке, и глобал
нафига ты в массив $stack записываешь ссылку на массив $tree?
при том, что $tree тоже передается в функцию?
global $stack; - в функциях как то поиному работают
а где еще "работет" global, кроме функций?

-~{}~ 15.11.07 13:14:

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

Фанат

oncle terrible
Команда форума
лично я, если надо обрабатывать несколько файлов подряд, пишу цикл, а не функцию
но это, конечно, вопрос вкуса.
 
переменные global надо переопределять в каждой подпрограмме где они используются...
а в главной я этого не сделал..
вот в этом и был косяк...

тема закрыта...
*****у спасибо личное..
 
Сверху