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

Array to string conversion when upgrading from php 5 to 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 后就停止了。我在论坛上浏览过类似的帖子,但到目前为止对我没有任何帮助.

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

$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) {
    }
  }

您应该使用不同的数组键来保存产品信息列表。类似于 $categories[$prd['category_id']]['products_list'][$prd['product_id']] = $prd;

最好在创建初始数据时初始化此密钥