【发布时间】:2023-03-24 07:02:01
【问题描述】:
我是 PHP 新手,已经阅读了 PHP Variable scope docs 和 other Stackoverflow threads 并且无法理解为什么在 foreach 循环中设置全局变量不起作用:
if (isset($regionsArr) && $page == 'regions') {
$param = htmlspecialchars($_GET["region"]);
foreach ($regionsArr as $item) {
if ($item['region'] == $param) {
global $curRegion;
$curRegion = $item;
echo $GLOBALS["curRegion"]["name"]; // works
} else {
$curRegion = null;
}
}
}
if (isset($GLOBALS["curRegion"])) {
echo $GLOBALS["curRegion"]["name"]; // does not work
}
【问题讨论】:
-
$GLOBALS["curRegion"]是$curRegion,猜猜你在foreach的后续迭代中覆盖它,你可以只使用$curRegion,然后一旦匹配到break;,就不会被覆盖 -
@LawrenceCherone 你是救世主。
break;就是一切。非常感谢您没有投票反对! :) -
np,您可以通过使用 array_filter、array_reduce 或 array_column、array_search 等来删除大部分代码3v4l.org/mZ02t
-
@LawrenceCherone 谢谢先生。 PS...如果你碰巧看硅谷,我哥哥马特扮演加文贝尔森:)