在 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; ?>
谢谢
你有两个问题:
你 echo
是一个使用 $i
的条目,但永远不会增加这个值,$i
仍然是 0。而且只有一步循环,你只用一条记录遍历数组。
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; ?>
我正在为此使用 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; ?>
谢谢
你有两个问题:
你
echo
是一个使用$i
的条目,但永远不会增加这个值,$i
仍然是 0。而且只有一步循环,你只用一条记录遍历数组。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; ?>