$ GLOBALS上的foreach函数会产生致命错误

时间:2016-06-24 20:11:43

标签: php mysql loops foreach

此功能一次只能在一个字段上运行:

foreach ($GLOBALS as $key => $value) {
if ($key === "special1") {
{$value = preg_replace('/src/','data-machin', $value);          
}}}

这一个 - 没有条件(因此它试图处理360个字段)不会:

foreach ($GLOBALS as $key => $value) 
{$value = preg_replace('/src/','data-machin', $value);          
}

并生成此致命错误:无法在第145行的/home/xxx/public_html/lib/mysqldb.php中增加/减少重载对象或字符串偏移量。

我怎么能让它发挥作用?

(大图:我正在尝试实施一个脚本来延迟加载照片)。

2 个答案:

答案 0 :(得分:1)

虽然使用全局变量通常是一个坏主意,更糟糕的是做这样的盲变量操作,你可以这样做:

foreach ($GLOBALS as $key => $value) {
    if (is_string($value)) {
        $GLOBALS[$key] = preg_replace('/src/','data-machin', $value);
    }
}

更新为包括is_string(),用于检查值是否为字符串。

答案 1 :(得分:0)

preg_replace仅对字符串值有意义。

因此,您可以使用is_string函数在迭代时检查值:

foreach ($GLOBALS as $key => $value) {
    if (is_string($value)) {
        $value = preg_replace('/src/','data-machin', $value); 
    }
}

另请注意,这段代码不会产生副作用 - 即$GLOBALS数组修改。您可以考虑使用references代替:

foreach ($GLOBALS as $key => &$value) {
    ...
}
unset($value);