首页 > 解决方案 > 从 php 5 升级到 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 后就停止了。我在论坛中浏览过类似的帖子,但到目前为止对我没有任何帮助。

标签: phpphp-7

解决方案


$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是一个数组,这会给您一个数组到字符串的转换错误。


推荐阅读