在一商城项目,给前端开发提供接口,有一个功能要求是这样的,提交订单如果提交多个商品,而商品属于不同商家,则要求每个商品生成一个订单(以前做法是,多个商品也会生成一个订单,但是假如在代付款选项中,客户并不能单独为每个商品付款),现在又加的是不同的商品,给商家留言信息。而留言信息,是通过json字符串的形式接收,并存入数据库对应的字段。
购物车rec_id,假如在提交订单时,不同的商品会添加到订单表生成不同的订单,去购物车表拿到不同的购物车商品信息。
$tid_inf = array_filter(explode(',',$_REQUEST['rec_id']));
foreach ($tid_inf as $key => $value) {
//店家留言说明
$partner_status = $_GET['partner_status'];
partner_status=[{"partner_id":"117","partner_status":"给店家留言"},{"partner_id":"78","partner_status":"这个东西真不错"}]
$partner_statuses = json_decode($partner_status,true);
//$partner_statuses打印的输出结果是这样的
/*
array(2) {
[0]=>
array(2) {
["partner_id"]=>
string(3) "117"
["partner_status"]=>
string(4) "给店家留言"
}
[1]=>
array(2) {
["partner_id"]=>
string(2) "78"
["partner_status"]=>
string(3) "这个东西真不错"
}
}
*/
if(!empty($partner_statuses)){
foreach ($partner_statuses as $key1 => $value1) {
if($value1['partner_id'] == $neworder['partner_id']){
$neworder['partner_status'] = $value1['partner_status'];
}else{
$neworder['partner_status'] = '';
}
}
}
}
因为不同的留言,是对应商家,也是不同的订单信息,保存到订单表里,输出的结果总是第一个为空,保留第二个,存到订单表里。
这个错误找了老半天,找不到原因,猛然间恍然大悟,原来是foreach循环里又嵌套了一个foreach()在执行循环的时候,第一层foreach()循环执行时,如果购物车id是两个1(对应的商家是117),2(对应的商家是78);商家id是117(携带的参数是:给店家留言),78(携带的参数是:这个东西真不错);而在后面携带的json参数,,前面对应是第二层foreach()循环赋值最后一个值,如果$value1['partner_id']等于$neworder['partner_id']值时,$neworder['partner_status'],购物车id循环一次,只有最后一次才会赋值,之前循环的字段几次总是为空。
if(!empty($partner_statuses)){
foreach ($partner_statuses as $key1 => $value1) {
if($value1['partner_id'] == $neworder['partner_id']){
$neworder['partner_status'] = $value1['partner_status'];
}
}
}
写代码总是个细活,马虎不得啊!