在 cakephp 中遍历数组仍然有未定义的偏移量

looping through array in cakephp still has Undefined offset

我正在为此使用 cakephp 2.2.5。

我在一个控制器中找到了一个包含从 'has many' 关系中提取四个新闻项的列表的控制器。

我正在尝试生成这四个项目的列表,但似乎无法使 php foreach 循环正常工作。

控制器数组是这样的:

    $newsLists = $this->Industry->find('all', array(
        'conditions' => array('id' => $id),
        'fields' => array('id'),
        'contain' => array(     
            'News' => array(
                'conditions' => array('News.type' => 'main','News.active' => 'Yes'),                        
                    'fields' => array(
                            'News.type', 
                            'News.id',
                            ),
                    'order' => array(
                        'News.created' => 'desc',
                       ),
                    'limit' => 3
        ))));


    $this->set('newsLists', $newsLists);

调试输出工作正常:

  Array
(
[0] => Array
    (
        [Industry] => Array
            (
                [id] => 1
                [tags] => 
            )

        [News] => Array
            (
                [0] => Array
                    (
                        [type] => main
                        [id] => 10
                        [industry_id] => 1
                    )

                [1] => Array
                    (
                        [type] => main
                        [id] => 11
                        [industry_id] => 1
                    )

                [2] => Array
                    (
                        [type] => main
                        [id] => 12
                        [industry_id] => 1
                    )

            )

    )

)

但是这个 foreach 循环只显示一项:

<ul>
<?php 
$i = 0;

foreach ($newsLists as $newsList): ?>

        <li><?php echo $newsList['News'][$i]['slug']; ?></li>

<?php endforeach; ?>

谢谢

你有两个问题:

  1. echo 是一个使用 $i 的条目,但永远不会增加这个值,$i 仍然是 0。而且只有一步循环,你只用一条记录遍历数组。

  2. slug 在你的数组中没有被破坏,只能使用 type, id, industry_id 之一

广告 1.
正确的方法是:

foreach ($newsLists['News'] as $newsList) {
    echo '<li>' . $newsList['type'] . '</li>'; // you can switch type to id or industry_id
}

应该是-

<?php foreach ($newsLists['News'] as $newsList): ?>

        <li><?php echo $newsList['field to print']; ?></li>

<?php endforeach; ?>

你应该注意的几点 -

There is no slug field.

You have mentioned fields - type & id. But the industry_id is also fetched.

解决方案涉及创建另一个循环,因为行业和新闻之间有很多关系。这个额外的循环允许循环播放新闻报道。

<?php foreach ($newsLists as $newsList): ?>
 <ul>
    <?php foreach ($newsList ['News'] as $list): ?>
    <li><?php echo $list['slug']; ?></li>
   <?php endforeach; ?>
 </ul>
<?php endforeach; ?>