2012-03-05 11 views
1

Я имею структуру последующих массива, и я успешно обхват через [LoyaltyHistory] части, используя для каждого цикла:Предупреждения (2): Недействительный аргумент для Еогеаспа()

Array 
(
    [0] => Array 
     (
      [LoyaltyHistory] => Array 
       (
        [id] => 5 
        [user_id] => 32 
        [points] => 4 
        [date] => 2012-02-07 
        [total] => 146 
       ) 

      [User] => Array 
       (
       ) 

     ) 

    [1] => Array 
     (
      [LoyaltyHistory] => Array 
       (
        [id] => 6 
        [user_id] => 32 
        [points] => -6 
        [date] => 2012-02-07 
        [total] => 140 
       ) 

      [User] => Array 
       (
       ) 

     ) 

    [2] => Array 
     (
      [LoyaltyHistory] => Array 
       (
        [id] => 7 
        [user_id] => 32 
        [points] => -5 
        [date] => 2012-02-07 
        [total] => 135 
       ) 

      [User] => Array 
       (
       ) 

     ) 

    [3] => Array 
     (
      [LoyaltyHistory] => Array 
       (
        [id] => 8 
        [user_id] => 32 
        [points] => 15 
        [date] => 2012-02-07 
        [total] => 150 
       ) 

      [User] => Array 
       (
       ) 

     ) 

    [4] => Array 
     (
      [LoyaltyHistory] => Array 
       (
        [id] => 9 
        [user_id] => 32 
        [points] => 5 
        [date] => 2012-02-10 
        [total] => 155 
       ) 

      [User] => Array 
       (
       ) 

     ) 

    [5] => Array 
     (
      [LoyaltyHistory] => Array 
       (
        [id] => 10 
        [user_id] => 32 
        [points] => 155 
        [date] => 2012-03-04 
        [total] => 305 
       ) 

      [User] => Array 
       (
       ) 

     ) 

    [6] => Array 
     (
      [LoyaltyHistory] => Array 
       (
        [id] => 11 
        [user_id] => 32 
        [points] => -5 
        [date] => 2012-03-04 
        [total] => 300 
       ) 

      [User] => Array 
       (
       ) 

     ) 

    [7] => Array 
     (
      [LoyaltyHistory] => Array 
       (
        [id] => 12 
        [user_id] => 32 
        [points] => 5 
        [date] => 2012-03-05 
        [total] => 305 
       ) 

      [User] => Array 
       (
       ) 

     ) 

) 

для каждой петли структурировано следующим образом:

<?php foreach ($history as $hist) 
    { 
     if($hist['LoyaltyHistory']['points'] > 0) $hist['LoyaltyHistory']['points'] = '+'.$hist['LoyaltyHistory']['points'];?> 
           <tr> 
            <td><?php echo $hist['LoyaltyHistory']['date']; ?></td> 
            <td><?php echo $hist['LoyaltyHistory']['points']; ?></td> 
            <td><?php echo $hist['LoyaltyHistory']['total']; ?></td> 
           </tr> 
        <?php } ?> 

для каждой петли outputing правильных элементов из массива, но это вызывает следующее предупреждение: 'Warning (2): Invalid argument supplied for foreach()' и я не могу понять, почему.

+0

Может быть, потому, что вы используете '$ history' как свою переменную цикла, но вызываете' $ h' внутри цикла? –

+0

Хорошо заметив, забыл обновить эту ссылку от $ h до $ hist, внесет поправку к оригинальному сообщению. К сожалению, это не то, что вызывает проблему. –

+0

Я попробовал вам пример с вашими данными, и он работает правильно. Попробуйте определить, после какого цикла вы получите это предупреждение. –

ответ

4

Эта ошибка возникает, главным образом, когда аргумент, полученный foreach, не является массивом. Попробуйте добавить var_dump($history) прямо сейчас. Одна из ваших записей должна иметь пустое значение вместо пустого массива.

+0

var_dump дает то же самое, что и вывод print_r в исходном сообщении. Как видите, все элементы «LoyaltyHistory» имеют ценность. –

+0

Но ваш foreach не перебирает массив 'LoyaltyHistory', а вместо этого через ваш основной массив. Можете ли вы показать нам больше кода? –

+0

Я знаю, что вы имеете в виду, но листинг в начальном столбце показывает всю структуру массива, и каждый элемент массива имеет данные. Я не уверен, что поможет другой код. Единственный другой код, который связан с контроллером: $ conditions = array ("user_id" => $ id); \t \t $ this-> set ('history', $ this-> LoyaltyHistory-> find ('all', array ('conditions' => $ conditions))); Это заполняет массив $ history и передает значение VIEW. –

Смежные вопросы