我有一个名为$blocks
的数组,其print_r()
函数将导致:
Array ( [0] => template.header [1] => error [2] => emails.addEmail )
这是我的代码是:
if(count($blocks)) {
foreach ($blocks as $block) {
echo $block;
$parts = explode('.', $block);
if (count($parts) > 1) {
list($folder, $file) = $parts;
$folder = $folder . '/';
echo BASE . '/blocks/' . $folder . $file . '.php';
} else {
echo BASE . '/blocks/' . $file . '.php';
}
}
$parts = null;
}
但它的表现很奇怪,第3行的echo
给了我这个:
template.header
error
error
第三个必须是emails.addEmail
,但它与第二个重复。
有谁能告诉我我的代码有什么问题?
更新:我删除了@
并将其替换为if (count($parts) > 1)
。抱歉,那些家伙。但它与我的问题没有任何关系!还需要帮助......
更新2:我在此代码之前的某处使用了$block
变量,它通过引用连接到另一个东西。通过更改变量名来解决问题。谢谢你们的帮助。
答案 0 :(得分:2)
我的第一印象是某个(包含的)文件以某种方式操纵$blocks
数组或$block
本身。你应该避免以这种方式引用变量;保持变量接近其使用范围。
我发现的其他问题:
echo BASE . '/blocks/' . $file . '.php';
应该是:
echo BASE . '/blocks/' . $block . '.php';
因为只有$file
包含至少两个元素才会设置$parts
。
另外要测试分割是否explode()
返回了两个项目:
if (isset($parts[1])) { ... }
或者:
if (count($parts) > 1) { ... }