Всем привет.
Проблема в том что когда моя функция конкатенирует текст в переменную, получается результат в переменной совсем не тот что я ожидал. Но когда я этот же текст вывожу на прямую через echo, все корректно.
Что за безобразие?
Хотел написать функцию построения иерархии категорий, которые хранятся в MySQL.
Вот категории, таблица `cat`:
Вот код php:
МОЖНО НЕ ВНИКАТЬ, ТАМ ВСЕ ОК$link = mysqli_connect('localhost', 'root', '', 'gold') or die("Ошибка " . mysqli_error($link));
$result = mysqli_query($link, "SELECT * FROM cat");
if (mysqli_num_rows($result) > 0){
$cats = array();
//В цикле формируем массив разделов, ключом будет id родительской категории, а также массив разделов, ключом будет id категории
while($row = mysqli_fetch_assoc($result))
$cats[ $row['prev'] ][ $row['id'] ] = $row;
}
//Сама функция построения дерева:
function build_tree($cats,$prev)
{
if( isset($cats[$prev]) )
{
$tree .= '<ul>';
foreach ($cats[$prev] as $cat)
{
$tree .= '<li>'. $cat['name'];
build_tree($cats, $cat['id']);
$tree .= '</li>';
}
$tree .= '</ul>';
}
return $tree;
}
//Вызываю
if(is_array($cats))
{
$tree = build_tree($cats,0);
echo $tree;
}
Результат получается таким:
Но если в функции построения, переменную заменить на непосредственный вывод:
function build_tree($cats,$prev)
{
if( isset($cats[$prev]) )
{
echo '<ul>';
foreach ($cats[$prev] as $cat)
{
echo '<li>'. $cat['name'];
build_tree($cats, $cat['id']);
echo '</li>';
}
echo '</ul>';
}
}
Все становится нормально. Пользуюсь OpenServer
PHP 5.6, MySQL 5.7, Apache 2.4
Когда сохраняю переменную $tree в файл, Там корректный одноуровневый ul, li список.
Когда сохраняют переменную в БД, в БД абсолютно ничего не сохраняется.