微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。