PHP简化for循环遇语法错误:unexpected 'U',求可行方案
解决PHP For循环简化时的语法错误及可行简化方案
嘿,你在简化重复的for循环代码时碰到的Parse error: syntax error, unexpected 'U',我猜大概率是简化过程中犯了小的语法错误——比如漏写了变量的$符号,或者数组索引的括号没配对,导致PHP把后面的字符当成了非法语法。先别慌,咱们先把你的需求拆解清楚,再给你提供几种靠谱的简化方式。
先还原一下你的原始代码(根据你给出的片段补全):
<?php for ($i=9; $i < 22; $i++) { // zet voor alle dagen van de week de gehuurde uuren in een array $D1U[$i] = $resourceUsage['data']['usage']['110556']['2018'][5][$days[0]][$i][15]; $D2U[$i] = $resourceUsage['data']['usage']['110556']['2018'][5][$days[1]][$i][15]; $D3U[$i] = $resourceUsage['data']['usage']['110556']['2018'][5][$days[2]][$i][15]; // 推测后面还有D4U、D5U这类重复的赋值语句 }
这种重复的赋值逻辑完全可以简化,下面给你两种实用的简化方案:
方案一:用动态变量批量处理
这种方式适合不想提前初始化所有数组的场景,通过动态变量名来批量赋值:
<?php // 把需要赋值的数组名和对应的days索引映射起来 $dayArrayMap = [ 'D1U' => 0, 'D2U' => 1, 'D3U' => 2, // 后续加新的天数数组,直接在这里追加就行 ]; for ($i=9; $i < 22; $i++) { foreach ($dayArrayMap as $arrayName => $dayIndex) { // 用$$访问动态变量,实现批量赋值 $$arrayName[$i] = $resourceUsage['data']['usage']['110556']['2018'][5][$days[$dayIndex]][$i][15]; } }
方案二:提前初始化数组(更规范)
如果想避免动态变量的潜在风险(比如变量名冲突),可以提前初始化所有目标数组,用引用传递来批量赋值:
<?php // 提前初始化需要的数组 $D1U = []; $D2U = []; $D3U = []; // 把数组放到一个容器里,用引用传递避免不必要的拷贝 $targetArrays = [&$D1U, &$D2U, &$D3U]; for ($i=9; $i < 22; $i++) { foreach ($targetArrays as $index => &$targetArr) { $targetArr[$i] = $resourceUsage['data']['usage']['110556']['2018'][5][$days[$index]][$i][15]; } }
为什么你之前的简化会报错?
你碰到的unexpected 'U'错误,很大可能是简化时犯了这类小错误:
- 漏写了变量的
$符号,比如把$D1U[$i]写成了D1U[$i],PHP会把D1U当成未定义的常量,进而把它解析成字符串'D1U',后面的[$i]就会触发语法错误; - 数组索引的括号没有配对,比如某个地方少了
],导致PHP把后面的U当成了非法语法。
总的来说,你想简化这种重复循环的思路完全可行,上面两种方案都能帮你减少冗余代码,后续维护也更方便。
内容的提问来源于stack exchange,提问作者berto
相关产品推荐
相关产品推荐

