PHP 7“无法将字符串偏移量用作数组”

问题描述

我们最近已升级PHP 7.4,并遇到以下代码块的潜在致命错误警报:

$total              = 0;
$balance            = 0;
if (is_array($company['history']) && ($histCount = count($company['history']))) {
    for ($i = $histCount - 1; $i >= 0; $i--) {
        $total   += $company['history'][$i]['amt_total'];
        $balance += $company['history'][$i]['due'];
        $company['history'][ $i ]['balance'] = $balance; // EA flags as potential Fatal error
        $company['history'][ $i ]['total']   = $total;   // EA flags as potential Fatal error
    }
}

history中的每个$company元素(以及其他)都已初始化amt_totalduebalancetotal,并且最后两个被初始化为0

EA标记了指示的两行,并说:“可能会引发PHP致命错误(不能使用字符串偏移量作为数组)。”

感谢任何可以帮助我了解这里问题的人。

其他信息 有人问定义$company代码是从哪里来的...

foreach ($this->orderList as $order) {
    if ($order['amt_paid'] !== $order['real_amt_paid'] && !empty($order['real_amt_paid'])) {
        $order['amt_paid'] = $order['real_amt_paid'];
    }
    $row       = [];
    foreach ($this->customerHistoryColumns as $col) {
        $order[$col[0]] = ($order[$col[0]] === null ? "" : str_replace("&","&",$order[$col[0]]));
        switch ($col[0]) {
            ...
            case "due":
                $row['due'] = $order['amt_total'] - $order['amt_paid'];
                break;
            ...
            default:
                $row[$col[0]] = $order[$col[0]];
                break;
        }
    }
    $row['balance'] = 0;
    $row['total'] = 0;
    $arr['history'][] = $row;
}
return $arr['history'];

公司本身在其他地方定义;这只是在检索history元素。

FWIW,该代码已经完美地工作了很多年;升级PHP7引起了这个问题。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)