从 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;
最好在创建初始数据时初始化此密钥
我已经升级到 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;
最好在创建初始数据时初始化此密钥