Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Закрытая темаСоздание новой темыСоздание опроса

> Функция возвращает ошибку., Функция возвращает ошибку.
Alex75  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 49
Пользователь №: 31861
На форуме: 5 лет, 2 месяца, 8 дней
Карма: -1




Вот часть кода вывода комментариев
$sql = ("SELECT id, post, parent_id, name, comment,
DATE_FORMAT(date_add, '%d %M %Y %H:%i') as date_add
FROM comments WHERE post='
$id_mess'");


$query = mysql_query($sql);

while($row = mysql_fetch_assoc($query))
{
$data[$row[id]] = $row;
}

/*Функция для создания дерева комментариев */

function mapTree($dataset) {
$tree = array(); // Создаем новый массив
/*
Проходим в цикле по массиву $dataset, который был передан в качестве аргумента.
в $id будет попадать уникальный id комментария,
&$node - обратите внимание, работаем со значением по ссылке!
*/

foreach ($dataset as $id=>&$node) {
if (!$node['parent_id']) { // не имеет родителя, т.е. корневой элемент#000000
$tree[$id] = &$node;
} else {
/*
Иначе это чей-то потомок
этого потомка переносим в родительский элемент,
при этом у родителя внутри элемента создастся массив childs, в котором и будут вложены его потомки
*/

$dataset[$node['parent_id']]['childs'][$id] = &$node; //

}
}


return $tree;
}

она работает прекрасно если в базе есть хотя бы один комментарий. Если комментариев еще нет то возвращается ошибка: Warning: Invalid argument supplied for foreach(). Подскажите пожалуйста как избавиться от этой ошибки.



Спустя 11 минут, 1 секунда (1.04.2012 - 08:57) Invis1ble написал(а):
Цитата
Warning: Invalid argument supplied for foreach()

текст ошибки явно говорит о том, что в foreach попадает неверный тип данных, т.е. не массив

Спустя 1 минута, 44 секунды (1.04.2012 - 08:59) Alex75 написал(а):
Да, я это уже понял, я не знаю как от этого избавиться.

Спустя 1 минута, 25 секунд (1.04.2012 - 09:00) Invis1ble написал(а):
перед вызовом mapTree проверять передаваемый аргумент

Спустя 5 минут, 41 секунда (1.04.2012 - 09:06) Alex75 написал(а):
Я не знаю как это сделать. Если знаете, подскажите пожалуйста.

Спустя 2 минуты, 16 секунд (1.04.2012 - 09:08) Invis1ble написал(а):
покажи, как вызывается mapTree()

Спустя 3 минуты, 25 секунд (1.04.2012 - 09:12) Alex75 написал(а):
Это? $data = mapTree($data);

Спустя 2 минуты, 22 секунды (1.04.2012 - 09:14) Invis1ble написал(а):
$data = is_array($data) ? mapTree($data) : array();

Спустя 4 минуты, 46 секунд (1.04.2012 - 09:19) Alex75 написал(а):
Вау, пропала ошибка. Большой респект. Не могли написать как читается сей волшебный код?

Спустя 3 минуты, 26 секунд (1.04.2012 - 09:22) Invis1ble написал(а):
В каком смысле "читается"? Это сокращенная запись для if-else, если data является массивом, то вызывается ф-ция mapTree и результат присваивается data, иначе присваивается пустой массив

Спустя 6 минут, 1 секунда (1.04.2012 - 09:28) Alex75 написал(а):
Да, меня сокращенная запись сбила с толку, я пока такой не понимаю. Спасибо большое.

Спустя 10 минут, 43 секунды (1.04.2012 - 09:39) johniek_comp написал(а):
Alex75
тут понятно написано что это такое

Спустя 1 час, 52 минуты, 42 секунды (1.04.2012 - 11:32) Alex75 написал(а):
johniek_comp Респект тоже.

Спустя 9 минут, 40 секунд (1.04.2012 - 11:41) killer8080 написал(а):
Alex75
Можно делать проверку и внутри функции
function mapTree($dataset) {
$tree = array(); // Создаем новый массив
if(!is_array($dataset))
return $tree;
/*
Проходим в цикле по массиву $dataset, который был передан в качестве аргумента.
в $id будет попадать уникальный id комментария,
&$node - обратите внимание, работаем со значением по ссылке!
*/

foreach ($dataset as $id=>&$node) {
...

Спустя 5 минут, 53 секунды (1.04.2012 - 11:47) Alex75 написал(а):
Цитата (killer8080 @ 1.04.2012 - 08:41)
Alex75
Можно делать проверку и внутри функции
function mapTree($dataset) {
$tree = array(); // Создаем новый массив
if(!is_array($dataset))
  return $tree;
    /*
        Проходим в цикле по массиву $dataset, который был передан в качестве аргумента.
        в $id будет попадать уникальный id комментария,
        &$node - обратите внимание, работаем со значением по ссылке! 
    */

  foreach ($dataset as $id=>&$node) { 
...

Проверил
if(!is_array($dataset))
return $tree;


Тоже работает. Респект.
На этом форуме реально мне помогли. На других предлагают сначала школу закончить потом книги по php выучить наизусть и тд. Не понятно зачем форумы вообще создавали, написали бы сразу на главной странице "читайте книги и сюда не ходите".
Спасибо вам всем кто помог.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Закрытая темаСоздание новой темыСоздание опроса