PHP,更新使用过时each()函数的代码

z5btuh9x  于 2023-03-07  发布在  PHP
关注(0)|答案(2)|浏览(150)

我正在尝试将一些PHP脚本从运行PHP版本7的PC移动到运行PHP版本8的PC。以下每个()查询都有问题:

do {
        $Tabelle->SetLine(array_values($Line));
        foreach($Line as $Spalte => $Kapitel) {
            list($Name, $URL) = each($URLs[$Spalte]);           
            if ($URL == "") $Line[$Spalte] = $Name; 
            else            $Line[$Spalte] = '<a href="'.$URL.'">'.$Name.'</a>';    
        }
    } while (reset($Line) != "" || next($Line) != "" || next($Line) != "");

我对此进行了如下自定义:

do {
        $Tabelle->SetLine(array_values($Line));
        foreach($Line as $Spalte => $Kapitel) {
            foreach($URLs[$Spalte] as $Name => $URL)
                if ($URL == "") $Line[$Spalte] = $Name; 
                else            $Line[$Spalte] = '<a href="'.$URL.'">'.$Name.'</a>';    
        }
    } while (reset($Line) != "" || next($Line) != "" || next($Line) != "");

它在无限循环中运行错误!
然后我调整如下:

$Tabelle->SetLine(array_values($Line));
        foreach($Line as $Spalte => $Kapitel) {
            foreach($URLs[$Spalte] as $Name => $URL) {
                if ($URL == "") $Line[$Spalte] = $Name; 
                else            $Line[$Spalte] = '<a href="'.$URL.'">'.$Name.'</a>';    
                $Tabelle->SetLine(array_values($Line));
            }
        }

它的工作虽然:在旧机器上,几行显示为每行3列,现在也是3列,但行数是平常的3倍,即第一列的值变化,第二列和第三列保持不变,然后第一列和第三列保持不变,第二列变化,然后第一列和第二列保持不变,第三列变化

w8ntj3qf

w8ntj3qf1#

我找到了这个解决方案,它很有效。使用myEach()代替each()

function myEach(&$array)
{
    $key = key($array);
    $result = ($key === null) ? false :
              [$key, current($array), 'key' => $key, 'value' => current($array)];
    next($array);
    return $result;
}
wgx48brx

wgx48brx2#

我不知道如果你的代码是工作之前.但这里是PHP8兼容版本的代码:

do {
    $Tabelle->SetLine(array_values($Line));
    foreach($Line as $Spalte => $Kapitel) {
        $URL = current($URLs[$Spalte]);
        $Name = key($URLs[$Spalte]);
        next($URLs[$Spalte]);
        $Line[$Spalte] = $URL? '<a href="'.$URL.'">'.$Name.'</a>': $Name;
    }
} while (reset($Line) != "" || next($Line) != "" || next($Line) != "");

相关问题