В этой статье описывается использование статических переменных в функциях PHP с примерами. Подробности заключаются в следующем:
Приведенный выше код выводит 0, 1 и 2 статические переменные $a соответственно. После первого определения и инициализации он останется в памяти до тех пор, пока сценарий не будет выполнен.
Когда функция msg() вызывается во второй раз, значение $a равно 1 вместо 0.
Так вот в чем проблема. Пожалуйста, посмотрите на следующий код:
$data = array( Array ('id '= > 1,' title '= >'clothes','parent' = > 0), Array ('id '= > 2,' title '= >'shoes','parent' = > 0), Array ('id '= > 3,' title '= >'shirt','parent '= > 1), Array ('id '= > 4,' title '= >'t-shirt','parent '= > 1), Array ('id '= > 5,' title '= >'sneakers','parent' = > 2), Array ('id '= > 6,' title '= >'casual shoes','parent' = > 2), ); $data2 = array( Array ('id '= > 1,' title '= >'food','parent '= > 0), Array ('id '= > 2,' title '= >'Meat','parent '= > 1), Array ('id '= > 3,' title '= >'vegetarian','parent '= > 1), Array ('id '= > 4,' title '= >'beef','parent '= > 2), Array ('id '= > 5,' title '= >'noodles','parent' = > 3), Array ('id '= > 6,' title '= >'steamed bread','parent '= > 3), ); //Spanning tree data function genTree($items, $id = 'id', $pid = 'parent', $son = 'child') { $tree = array(); $tmpMap = array(); foreach ($items as $item) { $tmpMap[$item[$id]] = $item; } foreach ($items as $item) { if (isset($tmpMap[$item[$pid]])) { $tmpMap[$item[$pid]][$son][] = &$tmpMap[$item[$id]]; } else { $tree[] = &$tmpMap[$item[$id]]; } } unset($tmpMap); return $tree; } //Through the given data, return the string of option for the select drop-down box function getOpts($data, $idArr = array(), $level = 0, $son = 'child') { static $opt = ''; if (!empty($data)) { foreach ($data as $k => $v) { $opt .= ''; if (!empty($v[$son])) { getOpts($v[$son], $idArr, $level + 1, $son); } } } return $opt; } $data = genTree($data); echo ''; $data2 = genTree($data2); echo '';
Для решения вышеуказанных проблем не рекомендуется использовать статические переменные внутри функций, которые могут вызываться много раз.
Измените функцию getopts следующим образом, введите ссылку на внешнюю переменную из параметра функции, чтобы решить эту проблему.
function getOpts($data, $idArr = array(), &$opt = '', $level = 0, $son = 'child') { if (!empty($data)) { foreach ($data as $k => $v) { $opt .= ''; if (!empty($v[$son])) { getOpts($v[$son], $idArr, $opt, $level + 1, $son); } } } } $data = genTree($data); getOpts($data, array(), $opt); echo ''; $data2 = genTree($data2); getOpts($data2, array(), $opt2); echo '';
Подробнее о содержании, связанном с PHP, заинтересованные читатели могут ознакомиться с нашими специальными разделами: краткое описание общих функций и навыков PHP, краткое описание использования строк PHP, полные навыки работы с массивом PHP, учебник по структуре и алгоритму данных PHP, а также краткое описание метода расчета программирования PHP
Я надеюсь, что эта статья будет полезна для программирования на PHP.