Foreach不工作-PHP
我需要将以下数组结构打印为:Foreach不工作-PHP,php,arrays,foreach,Php,Arrays,Foreach,我需要将以下数组结构打印为: Node Title 1 topic 1 topic 2 topic 3 topic 4 asset title1 asset title2 asset title3 如何使用foreach-PHP呢 我所做的是: foreach($output['fields'] as $key => $value) { if($key == 'title') { echo $
Node Title 1
topic 1
topic 2
topic 3
topic 4
asset title1
asset title2
asset title3
如何使用foreach-PHP呢
我所做的是:
foreach($output['fields'] as $key => $value) {
if($key == 'title') {
echo $value;
}
if(count($value['main_topic'])) {
foreach($value['main_topic'] AS $mainkey => $main_topic) {
echo $main_topic['topic_title'];
}
}
}
以上语法正在打印标题。但不是主主题数组。
Array
(
[fields] => Array
(
[nid] => 136
[node_title] => Node title 1
[node_type] => curriculum
[title] => Node title 1
[main_topic] => Array
(
[0] => Array
(
[row_id] => 136
[topic_id] => 411847
[weight] => 10
[topic_title] => topic 1
)
[1] => Array
(
[row_id] => 136
[topic_id] => 411839
[weight] => 2
[topic_title] => topic 2
)
[2] => Array
(
[row_id] => 136
[topic_id] => 411840
[weight] => 3
[topic_title] => topic 3
)
[3] => Array
(
[row_id] => 136
[topic_id] => 411841
[weight] => 4
[topic_title] => topic 4
[subfield] => Array
(
[1] => Array
(
[asset_title] => asset title 1
)
[2] => Array
(
[asset_title] => asset title 2
)
[3] => Array
(
[asset_title] => asset title 3
)
)
)
)
)
)
尝试此操作,您需要附加密钥:
echo $value['main_topic'][$mainkey]['topic_title'];
尝试此操作,您需要附加密钥:
echo $value['main_topic'][$mainkey]['topic_title'];
这是因为您正在迭代所有
$output['fields']
。
由于键'main\u topic'
包含在$output['fields']
数组中,因此在foreach中只作为$key
存在,因此决不会有键$value
与键'main\u topic'
。您需要的数组是$value
您的代码应该如下所示:
foreach($output['fields'] as $key => $value) {
if($key == 'title') {
echo $value;
continue;
}
if($key == 'main_topic' && is_array($value)) {
foreach($value as $main_topic) {
echo $main_topic['topic_title'];
}
}
}
为了用完整的解决方案(包括资产名称)来完成这个答案,下面是我将如何编写它 因为
$output['fields']
是起点,为了使代码更可读,我使用=&
操作符创建了对起始节点的引用,因此数组不会复制到内存中。我对内部的foreach
s也这样做。由于我们不修改数据,引用变量就足够了,并且占用的内存和CPU更少:
if (is_array($output['fields'])) {
$node =& $output['fields'];
echo $node['title'];
if(is_array($node['main_topic'])) {
foreach($node['main_topic'] as &$main) {
echo $main['topic_title'];
if(is_array($main['subfield'])) {
foreach($main['subfield'] as &$asset) {
echo $asset['asset_title'];
}
}
}
}
}
else {
echo "no menu";
}
这是因为您正在迭代所有
$output['fields']
。
由于键'main\u topic'
包含在$output['fields']
数组中,因此在foreach中只作为$key
存在,因此决不会有键$value
与键'main\u topic'
。您需要的数组是$value
您的代码应该如下所示:
foreach($output['fields'] as $key => $value) {
if($key == 'title') {
echo $value;
continue;
}
if($key == 'main_topic' && is_array($value)) {
foreach($value as $main_topic) {
echo $main_topic['topic_title'];
}
}
}
为了用完整的解决方案(包括资产名称)来完成这个答案,下面是我将如何编写它 因为
$output['fields']
是起点,为了使代码更可读,我使用=&
操作符创建了对起始节点的引用,因此数组不会复制到内存中。我对内部的foreach
s也这样做。由于我们不修改数据,引用变量就足够了,并且占用的内存和CPU更少:
if (is_array($output['fields'])) {
$node =& $output['fields'];
echo $node['title'];
if(is_array($node['main_topic'])) {
foreach($node['main_topic'] as &$main) {
echo $main['topic_title'];
if(is_array($main['subfield'])) {
foreach($main['subfield'] as &$asset) {
echo $asset['asset_title'];
}
}
}
}
}
else {
echo "no menu";
}
$value
是数组,而不是$key['main\u topic']
foreach($output['fields'] as $key => $value) {
if($key == 'title') {
echo $value;
}
if($key == 'main_topic') {
foreach($value as $mainkey => $main_topic) {
echo $main_topic['topic_title'];
}
}
}
$value
是数组,而不是$key['main\u topic']
foreach($output['fields'] as $key => $value) {
if($key == 'title') {
echo $value;
}
if($key == 'main_topic') {
foreach($value as $mainkey => $main_topic) {
echo $main_topic['topic_title'];
}
}
}
你的数组部分弄糊涂了 试试看(我还没有测试过):
你的数组部分弄糊涂了 试试看(我还没有测试过):
$main_topic是迭代对象。无需指定键。$main_topic是迭代对象。不需要指定密钥。是的,我刚刚意识到我在第一个错误之后就停止了修复代码。我在编辑中也修改了内部foreach。文章经过编辑,对
$node=&$output['node']进行了更详细的解释代码>是的,我刚刚意识到我在第一个错误之后就停止了修复代码。我在编辑中也修改了内部foreach。文章经过编辑,对$node=&$output['node']进行了更详细的解释代码>