Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Foreach不工作-PHP_Php_Arrays_Foreach - Fatal编程技术网

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']进行了更详细的解释