从php 5升级到php 7时将数组转换为字符串

时间:2019-02-04 11:09:13

标签: php php-7

我已升级到php 7,现在此代码引发了一个将字符串转换为字符串的错误。

$categories[$prd['category_id']]['products'][$prd['product_id']] = $prd;

$categories包含以下内容:

array(2) {
  [278515]=>
  array(8) {
    ["category_id"]=>
    string(6) "278515"
    ["parent_id"]=>
    string(1) "0"
    ["category_name"]=>
    string(8) "Desserts"
    ["category_description"]=>
    string(0) ""
    ["category_image"]=>
    string(0) ""
    ["wholesaler_id"]=>
    string(3) "296"
    ["category_position"]=>
    string(2) "21"
    ["products"]=>
    string(1) "2"
  }
  [0]=>
  array(8) {
    ["category_id"]=>
    string(1) "0"
    ["parent_id"]=>
    string(1) "0"
    ["category_name"]=>
    string(11) "No Category"
    ["category_description"]=>
    string(20) "category_description"
    ["category_image"]=>
    string(0) ""
    ["wholesaler_id"]=>
    string(3) "296"
    ["category_position"]=>
    string(1) "0"
    ["products"]=>
    string(4) "1182"
  }
}

$prd包含以下内容:

array(11) {
  ["product_id"]=>
  string(7) "4195072"
  ["category_id"]=>
  string(1) "0"
  ["parent_id"]=>
  string(1) "0"
  ["product_num"]=>
  string(1) "7"
  ["product_name"]=>
  string(18) "Chicken Pizza, 12""
  ["product_description"]=>
  string(0) ""
  ["product_image"]=>
  string(0) ""
  ["product_price"]=>
  string(4) "0.00"
  ["wholesaler_id"]=>
  string(3) "296"
  ["is_variant"]=>
  string(1) "0"
  ["is_mealdeal"]=>
  string(1) "1"
}

这段代码曾经在php 5中工作,但是自从我升级到php 7之后就停止了。我在论坛上浏览了类似的帖子,但是到目前为止,对我来说没有任何作用。

2 个答案:

答案 0 :(得分:2)

$prd['category_id']0,而$prd['product_id']4195072,所以

$categories[$prd['category_id']]['products'][$prd['product_id']] = $prd;

翻译为

$categories[0]['products']['4195072'] = $prd;

并且由于$categories[0]['products']是一个字符串('1182'),PHP将此视为尝试为从位置4195072开始的字符串部分赋值。由于$prd是一个数组,这会给您一个数组到字符串的转换错误。

答案 1 :(得分:0)

$categories[$prd['category_id']]['products'][$prd['product_id']] = $prd;

在您的情况下,$categories[$prd['category_id']]['products']是一个字符串,但是您将其用作数组。

'products'的任何一个都应该是原始数据中的一个数组:

array(2) {
  [278515]=>
  array(8) {
    ["category_id"]=>
    string(6) "278515"
    ...
    ["products"]=>
    array(0) {
    }
  }

OR

您应使用其他阵列键保存产品信息列表。像$categories[$prd['category_id']]['products_list'][$prd['product_id']] = $prd;

创建初始数据时最好初始化此键