我已升级到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之后就停止了。我在论坛上浏览了类似的帖子,但是到目前为止,对我来说没有任何作用。
答案 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;
创建初始数据时最好初始化此键