我的laravel控制器文件中有以下代码。
$j_decode->$data['_kfdTourDate']->available = ($j_decode->$data['_kfdTourDate']->available+$totalincrement);
我收到以下错误。
BookingsController.php第325行中的ErrorException:数组到字符串 BookingsController.php第325行中的转换 HandleExceptions-> handleError(' 8','数组到字符串转换', ' d:\ XAMPP \ htdocs中\拉拉\应用\ HTTP \控制器\ BookingsController.php&#39 ;, ' 325',数组('请求' =>对象(请求),' id' =>' 0',&#39 ;规则' => array(),'验证器' =>对象(Validator),'数据' =>数组(' _kpnID' => ' 153290',' _kfnTourID' => ' 2',' _kfdTourDate' => ' 2017年3月16日&#39 ;, ' nAdults' => ' 2',' nChildren' => ' 1',' n婴儿' => ' 0',' nBabies' => ' 2',' nFOC' => ' 2',' nPriceAdult' => ' 74.25',' nPriceChild' => ' 49.5&#39 ;, ' nPriceInfant' => ' 0',' nPriceBaby' => ' 0',' nTotalPrice' => ' 148.5&#39 ;, ' tGuestName' => ' Yuhiko Nishioka',' tGuestOrigin' => '未知&#39 ;, ' tEnquirySourceWhat' => '未知',' tStatus' => '确认&#39 ;, ' _kfnAgentID' => ' 0',' _kfnPersonID' => ' 0',' _kfnInvoiceID' => ' 0&#39 ;, ' nAgentCommissionPercent' => ' 0',' nDiscount_percent' => ' 0&#39 ;, ' nDiscount_fixed' => ' 0',' tNotes' => ' 4WD Tour套餐/ Rezdy,已申请 折扣',' tInitials' => ' JD',' CreatedOn' => ' 2017-01-21 15:08:00', ' ModifiedOn' => ' 2017-01-21 15:10:00',' tTicketNumber' => ' Rezdy&#39 ;, ' _kfnOrganisationID' => ' 0'),'日程安排' =>对象(集合), ' j_decode' => object(stdClass),' update_id_data' =>对象(stdClass的), ' totalincrement' => ' 3'))在BookingsController.php第325行
有趣的是,当我将它上传到我的主机时,它在linux服务器上工作。我拉着头发,我觉得它不起作用。我在localhost上有PHP版本7.0.13,在服务器上有PHP版本5.6.30。很难理解这一行如何导致Array转换为字符串转换错误。你能帮我解决这个问题吗?我不愿意在localhost上降级我的php版本,因为我有其他代码,php5不支持。谢谢你提前。
更新
控制器中的整个代码:
$rules = $this->validateForm();
$validator = Validator::make($request->all(), $rules);
if ($validator->passes()) {
$data = $this->validatePost( $request );
$schedule = DB::table('schedule')
->where('id','=',$data['_kfnTourID'])
->get();
if(isset($_SESSION['bookingiddata']))
{
print_r ($j_decode= json_decode($schedule[0]->data));
$update_id_data = json_decode($_SESSION['bookingiddata']);
$totalincrement = $update_id_data->nAdults+$update_id_data->nChildren+$update_id_data->nInfants+$update_id_data->nFOC;
//$j_decode->$data['_kfdTourDate']->available = ($j_decode->$data['_kfdTourDate']->available+$totalincrement);
$j_decode->$data['_kfdTourDate']['available'] = ($j_decode->$data['_kfdTourDate']['available']+$totalincrement);
($j_decode->$data)['_kfdTourDate']->status = "available";
另外print_r $j_encode = json_encode($j_decode);
打印出以下内容
{" 2017年2月13日" {"购":1,"结合":0,"信息":& #34;""笔记":"""价格":0,"促销":0,&# 34;状态":"购"}" 2017年2月14日" {"购":1,"结合" :0,"信息":"""笔记":"""价格":0, "促销":0,"状态":"购"}" 2017年2月8日" {"购&# 34;:0,"结合":0,"信息":"""笔记":"&#34 ;,"价格":0,"促销":0,"状态":"预订"}" 2017-02 -12" {"购":0,"结合":0,"信息":""&#34 ;笔记":"""价格":0,"促销":0,"状态":"预订"}" 2017年2月10日" {"购":0,"结合":0,"信息" :"""笔记":"""价格":0,"促销":0, "状态":"预订"}" 2017年2月15日" {"购":0,"结合&# 34;:0,&#34 ;信息":"""笔记":"""价格":0,"促销&# 34;:0,"状态":"预订"}" 2017年2月16日" {"购":0,& #34;结合":0,"信息":"""笔记":"""价":0,"促销":0,"状态":"预订"} ...
答案 0 :(得分:1)
PHP7中有一些操作顺序更改(请参阅Changes to the handling of indirect variables, properties, and methods)。我怀疑你可能需要弄清NSUserNotificationCenter
中的一些括号,以便按照你想要的顺序进行评估。
答案 1 :(得分:1)
好,如上所述here
在php 5.6.3中,允许使用这个表达式:
echo $json_decode->$data['_kfdTourDate']->available;
所以,您试图访问$data['_kfdTourDate']
对象
$json_decode
的值
在php 7中,
现在可以间接访问变量,属性和方法 严格按照从左到右的顺序评估 ,而不是之前的评估 混合特殊情况。下表显示了顺序如何 评估已经改变。
因此,解释器会将此代码解释如下:
echo $json_decode->$data['_kfdTourDate']->available;
// first , give me the value $json_decode->$data,
// then choose the _kfdTourDate key
要解决这个问题,您需要:
echo $json_decode->{$data['_kfdTourDate']}->available;
告诉php $data['_kfdTourDate']
只是一个值;