使用php v7.0.13进行数组到字符串转换错误

时间:2017-03-20 07:50:56

标签: php arrays string laravel php-7

我的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,"状态":"预订"} ...

2 个答案:

答案 0 :(得分:1)

PHP7中有一些操作顺序更改(请参阅Changes to the handling of indirect variables, properties, and methods)。我怀疑你可能需要弄清NSUser​Notification​Center中的一些括号,以便按照你想要的顺序进行评估。

答案 1 :(得分:1)

好,如上所述here

在php 5.6.3中,允许使用这个表达式:

echo $json_decode->$data['_kfdTourDate']->available;

所以,您试图访问$data['_kfdTourDate']对象

中的元素$json_decode的值

例如:https://3v4l.org/i9Q7p

在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']只是一个值;

相关问题