显示php 7.1更新后json_encoded对象不起作用

时间:2019-01-08 10:37:36

标签: php arrays

我有两个网站,一个运行在PHP 7.0上,另一个运行在PHP 7.1上,我可以将产品存储在两个购物车中的购物车上,这仍然有效,但是产品也可以选择(例如颜色,尺寸等等)。

这也需要在购物车中显示,否则人们会两次添加具有相同选项的相同产品,但是人们只会看到同一产品两次,并且无法区分它们。

我已经编写了该代码,并且在PHP 7.0上可以工作,但是在7.1上,选项为空,为什么会这样?

这是我的代码:

<?php
$n = 0;
$o = 0;

// Loop array inside select element where product options are selected

foreach($varpijp as $productvar) {
    // Filter anything empty

    if (!empty($productvar)) {
        $productvar['artikelid'] = $artikel['content_id'];
        $productvar['prodoptie'] = $o . $artikel['content_id'];

        // Empty options every loop

        $productopties = '';
        $productarray = '';

        // Loop options and make key useable with $key and value with $prodvalue

        foreach($productvar as $key => $prodvalue) {
            if ($key == 'Prijs') {
                $key = str_replace('Prijs', '', $key);
            } elseif ($key == 'prodoptie') {
                $key = '';
                $prodvalue = '';
            } elseif ($key == 'artikelid') {
                $key = '';
                $prodvalue = '';
            } else {
                $key = $key . ': ';
            }

            // Put results in variable $productopties

            $productopties.= $key . '' . $prodvalue . '&nbsp;&nbsp; ';
        }

        foreach($productvar as $key1 => $prodvalue1) {
            if ($key1 == 'Prijs') {
                $key1 = str_replace('Prijs', '', $key1);
            } else {
                $key1 = $key1 . ': ';
            }

            if ($key1 !== 'Prijs') {
                $productarray[] = $key1 . $prodvalue1;
                $serializedarray = json_encode($productarray);
            }
        }

        // Loop all option tags

        $productvars.= "<option value='" . $productvar['prodoptie'] . "' data-array='" . $serializedarray . "' data-optie='" . $o . "' data-src='" . $prijscalc . "'>" . $productopties . "</option>";
    }

    $n++;
    $o++;
}

echo $productvars;

就像我说的那样,它在7.0上可以正常工作,但是当我将错误报告显示在7.1站点上的所有内容时,我在此行得到了错误:

$productarray[] = $key1 . $prodvalue1;

创建这样的数组显然不再起作用,因此请尝试如下操作:

$productarray = array();
$productarray[] = $key1 . $prodvalue1;

错误消失了,但是现在我的选项始终为空,我不确定为什么。

该如何解决?

$productvars .= "<option value='".$productvar['prodoptie']."' data-array='".$serializedarray."' data-optie='".$o."' data-src='".$prijscalc."'>".$productopties."</option>";

我需要上面的代码$serializedarray

在工作站点上,例如:

["\u20ac 124,95  -  ","Aantal kratten: 1","artikelid: 40","prodoptie: 040"]

但是在7.1网站上,同时具有多个选项的产品仅向我显示以下内容:

["prodoptie: 0315"]

这是我得到的错误:

  

致命错误:未捕获错误:/home/website/public_html/product-page.php:256中的字符串不支持[]运算符

当我使用与7.0相同的代码

1 个答案:

答案 0 :(得分:2)

$productarray;应该是一个数组,但是定义为字符串:$productarray = '';

将此声明替换为$productarray = array();

有关从php 7.0到7.1的更改的更多信息,请参见official documentation

  

在空字符串上按字符进行字符串修改现在的工作方式类似于非空字符串,即,写入超出范围的偏移量时,将使用空格填充字符串,其中非整数类型将转换为整数,并且仅将第一个字符使用分配的字符串。 以前,空字符串被当作空数组静默对待。