我有以下数组:
$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()看看它是否正确。