Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Invalid argument supplied


Автор: Антоннио 12.3.2010, 13:53
 Необходимо добавить различное описание рубрик в rrs-расписке, ранее было для всех рубрик одиннаковые тэги <description> сейчас необходимо поменять...начал разбирать код - нашел массив $data - в котором формируется описание каждой рубрики - решил в его структуру добавить последним элементом описание по каждой рубрике...все было бы нормально - если не ошибка которая мне выдалась :

 Invalid argument supplied for foreach() in rss.php line 41

.

Показываю саму дату, где и что я менял

ДО :
Код

public $data = array(
        array('Болезни и Лечение', 
            '/health/articles/:id.html', 'ID', 'Title', 'Text', 'Date', null, null,
            'ArticleDAO', 'health', 'getLastArticles', 3, 800), 
        array('Здоровый Образ Жизни', 
            '/coolhealth/articles/:id.html', 'ID', 'Title', 'Text', 'Date', null, null,
            'ArticleDAO', 'ch', 'getLastArticles', 3, 800),
        array('Скорая Справочная', 
            '/handbook/articles/:id.html', 'ID', 'Title', 'Text', 'Date', null, null,
            'ArticleDAO', 'encyclop', 'getLastArticles', 3, 800),
        array('Likar для Профи', 
            '/profi/articles/:id.html', 'ID', 'Title', 'Text', 'Date', null, null,
            'ArticleDAO', 'profi', 'getLastArticles', 3, 800),
        array('Новости из Украины', 
            '/news/:id.html', 'id', 'title', 'body', 'ndate', 'ntime', null,
            'NewsDAO', null, 'getLastNewsWithText', 1, 5),
        array('Новости со всего мира', 
            '/news/:id.html', 'id', 'title', 'body', 'ndate', 'ntime', null,
            'NewsDAO', null, 'getLastNewsWithText', 0, 5),
        array('Консультации', 
            '/consult/questions/:id.html', 'ID', 'Question', 'Question', 'Posted', null, 'Doctor',
            'ConsultDAO', null, 'getLastQuestions', 5, null),
        array('Форум для всех', 
            '/forum/theme:id.html', 'id', 'name', 'text', 'date', null, null,
            'ForumDAO', null, 'getThemesForIndex', 5, 400),
        array('Отзывы раздела адресов', 
            '/addresses/0/0/0/:id.html', 'id', 'name', 'review', 'date', null, null,
            'ReviewsDAO', null, 'getLastReviews', 5, null),
    );


после :

Код

public $data = array(
        array('Болезни и Лечение', 
            '/health/articles/:id.html', 'ID', 'Title', 'Text', 'Date', null, null,
            'ArticleDAO', 'health', 'getLastArticles', 3, 800, 'des1'), 
        array('Здоровый Образ Жизни', 
            '/coolhealth/articles/:id.html', 'ID', 'Title', 'Text', 'Date', null, null,
            'ArticleDAO', 'ch', 'getLastArticles', 3, 800, 'des2'),
        array('Скорая Справочная', 
            '/handbook/articles/:id.html', 'ID', 'Title', 'Text', 'Date', null, null,
            'ArticleDAO', 'encyclop', 'getLastArticles', 3, 800, 'des3'),
        array('Likar для Профи', 
            '/profi/articles/:id.html', 'ID', 'Title', 'Text', 'Date', null, null,
            'ArticleDAO', 'profi', 'getLastArticles', 3, 800, 'des4'),
        array('Новости из Украины', 
            '/news/:id.html', 'id', 'title', 'body', 'ndate', 'ntime', null,
            'NewsDAO', null, 'getLastNewsWithText', 1, 5, 'des5'),
        array('Новости со всего мира', 
            '/news/:id.html', 'id', 'title', 'body', 'ndate', 'ntime', null,
            'NewsDAO', null, 'getLastNewsWithText', 0, 5, 'des6'),
        array('Консультации', 
            '/consult/questions/:id.html', 'ID', 'Question', 'Question', 'Posted', null, 'Doctor',
            'ConsultDAO', null, 'getLastQuestions', 5, null, 'des7'),
        array('Форум для всех', 
            '/forum/theme:id.html', 'id', 'name', 'text', 'date', null, null,
            'ForumDAO', null, 'getThemesForIndex', 5, 400, 'des8'),
        array('Отзывы раздела адресов', 
            '/addresses/0/0/0/:id.html', 'id', 'name', 'review', 'date', null, null,
            'ReviewsDAO', null, 'getLastReviews', 5, null, 'des9'),
    );


и собственно 41-ую строку где вылетает эта ошибка :

Код

 foreach($data as $a) {    
        if ($a[13]) {
           foreach($a[13] as $item) {  #41-ая строка
                $link = str_replace(":id", $item[$a[2]], $a[1]);                
                $articleText = $item[$a[4]]."...";


помогите решить проблему, так чтобы можно было поменять струтуру даты...

Автор: azesmcar 12.3.2010, 13:57
В $a[13] лежит текст а ты к нему как к массиву обращаешься.

Автор: Ипатьев 12.3.2010, 13:59
$a[13], насколько я вижу, не массив и не должен быть массивом. С какой стати тут цикл foreach?

Автор: Антоннио 12.3.2010, 14:04
Цитата(Ипатьев @ 12.3.2010,  13:59)
$a[13], насколько я вижу, не массив и не должен быть массивом. С какой стати тут цикл foreach?

от чего же до этого все работало - я ведь добавил 'des{index}' последним элементом - то есть 14-ым...

Автор: azesmcar 12.3.2010, 14:06
Цитата(Антоннио @  12.3.2010,  14:04 Найти цитируемый пост)
от чего же до этого все работало - я ведь добавил 'des{index}' последним элементом - то есть 14-ым... 

В php массивы индексируются с нуля, но даже в этом случае в $a[13] у тебя массива никак не будет.

Автор: Антоннио 12.3.2010, 14:09
Цитата(azesmcar @ 12.3.2010,  14:06)
Цитата(Антоннио @  12.3.2010,  14:04 Найти цитируемый пост)
от чего же до этого все работало - я ведь добавил 'des{index}' последним элементом - то есть 14-ым... 

В php массивы индексируются с нуля, но даже в этом случае в $a[13] у тебя массива никак не будет.

 Я все понимаю, что с нуля...только вот не могу понять от чего тут ошибка?
скажите что нужно сделать чтобы оставить 'des{index}' а ошибка ушла - может тогда пойму что не так...

Автор: azesmcar 12.3.2010, 14:16
Цитата(Антоннио @  12.3.2010,  14:09 Найти цитируемый пост)
 Я все понимаю, что с нуля...только вот не могу понять от чего тут ошибка?

как тут еще объяснить? на пальцах подсчитай, в $a[13] лежит ТЕКСТ. Например 'des9'. Это текст а не массив, foreach не работает с текстом.
запусти код и проверь если не веришь на слово, непонятно чего ты хочешь добиться
Код

<?php
    $a = 'des';
    foreach ($a as $i) {
        echo $i;
    }
?>

Автор: bars80080 12.3.2010, 15:05
Цитата(Антоннио @  12.3.2010,  13:09 Найти цитируемый пост)
 Я все понимаю, что с нуля...только вот не могу понять от чего тут ошибка?

Цитата(Антоннио @  12.3.2010,  13:04 Найти цитируемый пост)
от чего же до этого все работало - я ведь добавил 

в коде забито

foreach($data as $a) {    
        if ($a[13]) {
           foreach($a[13] as $item)

что переводится как: при переборе элементов $data, если есть элемент #13, то разобрать его как массив.
до сих пор этого элемента не было, потому и ошибок не было

Автор: azesmcar 12.3.2010, 15:13
Цитата(bars80080 @  12.3.2010,  15:05 Найти цитируемый пост)

что переводится как: при переборе элементов $data, если есть элемент #13, то разобрать его как массив.
до сих пор этого элемента не было, потому и ошибок не было 

Должно было быть предупреждение - undefined offset, видимо просто показ предупреждений отключен.

Автор: Антоннио 12.3.2010, 18:56
 Выкупил проблемы, всем спасибо за советы!;)
нужно было добавить перед полем 'des' пустое поле с параметром null - просто там архитектура движка такая, что дописывалось в выбранную  тематику 13-ый элемент - массив из всех статей..таким образом где был не пустой 13-ый елемент - его обрабатывали =).
 Я добавил 13-ый элемент null - абсолютно всем - и после него добавил 14-ый елемент 'des', таким образом записывались данные в 13-ый елемент smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)