对于每个人。按键名访问数组项:"Illegal string offset"



我有以下数组:

$leggi = Array("LeggeRegionale" =>  
    Array("0" =>
        Array("intestazione" => "Legge regionale...", "articolato" => 
            Array("articolo" => 
                Array("num_articolo" => "Art. 25", "rubrica" => "Abrogazione", "commi" => 
                    Array("num_comma" => "1.", "alinea" => "", "corpo" => "L'articolo..."),
                    ),
                ),
            ),
        ),
    );

使用下面的代码,我可以循环遍历数组[LeggeRegionale]及其所有子数组。

echo "<pre>";
    print_r($leggi);
echo "</pre>";
echo "<pre>";
    foreach ($leggi[LeggeRegionale] as $legge) {
        echo $legge['intestazione'].PHP_EOL;
        foreach ($legge[articolato] as $key => $articolo) {
            echo $articolo['num_articolo'];
            echo $articolo['rubrica'].PHP_EOL;
            foreach($articolo[commi] as $value) {
                echo $value['num_comma'];    // <--- Doesn't work. Illegal string offset
                if (!is_array($value)) {     // <--- Does work.
                    echo $value;
                }
            }
        }
    }
echo "</pre>";

由于需要对数组的项进行一些字符串操作,因此需要使用键访问每个项。

我理解"非法字符串偏移"意味着项目是一个字符串,事实上,错误下面的IF (!is_array)语句证明了这一点。

我绝对不明白的是:但[commi]不是一个数组作为[LeggeRegionale][articolo],我可以简单地写一个项目,例如$articolo['num_articolo'] ?

数组[articolo]和数组[commi]之间的区别是什么?

VAR_DUMP说:

array(1) {
    ["LeggeRegionale"]=>
        array(1) {
            [0]=>
                array(2) {
                    ["intestazione"]=>
                        string(18) "Legge regionale..."
                    ["articolato"]=>
                        array(1) {
                            ["articolo"]=>
                                array(3) {
                                    ["num_articolo"]=>
                                        string(7) "Art. 25"
                                    ["rubrica"]=>
                                        string(11) "Abrogazione"
                                    ["commi"]=>
                                        array(3) {
                                            ["num_comma"]=>
                                                string(2) "1."
                                            ["alinea"]=>
                                                string(0) ""
                                            ["corpo"]=>
                                                string(13) "L'articolo..."
                                    }
                               }
                          }
                     }
                }
           }

总而言之,我想像这样访问数组[commi]的项:

echo $value['num_comma'];
echo $value['alinea'];
echo $value['corpo'];

不循环最后一个数组,直接使用

foreach ($leggi['LeggeRegionale'] as $legge) {
    echo $legge['intestazione'];
    foreach ($legge['articolato'] as $key => $articolo) {
        echo $articolo['num_articolo'];
        echo $articolo['rubrica'];
        if (is_array($articolo['commi'])) {
            echo $articolo['commi']['num_comma'];
            echo $articolo['commi']['alinea'];
            echo $articolo['commi']['corpo'];
        }
    }
}

我怀疑你的数组结构有问题,试试var_dump()看看它是否正确。

最新更新