使用php v7.0.13时数组到字符串转换错误
我的laravel控制器文件中有以下代码使用php v7.0.13时数组到字符串转换错误,php,arrays,string,laravel,php-7,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行中的转换 HandleExceptio
$j_decode->$data['_kfdTourDate']->available = ($j_decode->$data['_kfdTourDate']->available+$totalincrement);
我得到了以下错误
BookingsController.php第325行中的ErrorException:数组到字符串
BookingsController.php第325行中的转换
HandleExceptions->handleError('8','数组到字符串转换',
'D:\XAMPP\htdocs\lara\app\Http\Controllers\BookingsController.php',
'325',数组('request'=>对象(请求),'id'=>'0','rules'=>
数组(),'validator'=>对象(验证器),'data'=>数组(''u kpnID'=>
‘153290’、‘kfnTourID’=>‘2’、‘kfdTourDate’=>‘2017-03-16’,
'nAdults'=>'2','nChildren'=>'1','nInfants'=>'0','nBabies'=>
‘2’、‘nFOC’=>‘2’、‘Nprice成人’=>‘74.25’、‘nPriceChild’=>‘49.5’,
“nPriceBaby”=>“0”、“nPriceBaby”=>“0”、“nTotalPrice”=>“148.5”,
'tGuestName'=>'Yuhiko Nishioka','tGuestOrigin'=>'Unknown',
'tEnquirySourceWhat'=>'未知','tStatus'=>'确认',
“\u kfnAgentID'=>0',”\u kfnPersonID'=>0',“\u kfnInvoiceID'=>0',
'nAgentCommissionPercent'=>'0','nDiscount\u percent'=>'0',
“nDiscount_fixed”=>“0”,“tNotes”=>“4WD旅游套餐/Rezdy,已应用”
折扣“、”天价“=>”京东“、”CreatedOn“=>”2017-01-21 15:08:00”,
“ModifiedOn”=>“2017-01-21 15:10:00”,“tTicketNumber”=>“Rezdy”,
“\u kfnOrganisationID'=>“0”),“schedule'=>对象(集合),
'j_decode'=>对象(stdClass),'update_id_data'=>对象(stdClass),
BookingsController.php第325行中的“totalincrement”=>“3”)
有趣的是,当我将它上传到主机时,它正在linux服务器上工作。我在拔头发,我以为它不起作用了。我在localhost上安装了PHP版本7.0.13,在服务器上安装了PHP版本5.6.30。很难理解这一行如何导致数组到字符串的转换错误。你能帮我弄清楚这一点吗?我不愿意在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\u encode=json\u encode($j\u decode)代码>向我打印以下内容
{“2017-02-13:{“可用”:1,“绑定”:0,“信息”:“备注”:“价格”:0,“促销”:0,“状态”:“可用”},“2017-02-14:{“可用”:1,“绑定”:0,“信息”:“备注”:“价格”:0,“促销”:0,“状态”:“可用”},“2017-02-08:{“可用”:0,“绑定”:0,“信息”:“备注”:“价格”:0,“促销”:0,“状态”:“预订”},“2017-02-12:{“可用”:0,“绑定”:0,“信息”:,“备注”:“价格”:0,“促销”:0,“状态”:“预订”,2017-02-10:{“可用”:0,“绑定”:0,“信息”:“备注”:“价格”:0,“促销”:0,“状态”:“预订”,2017-02-15:{“可用”:0,“绑定”:0,“信息”:“备注”:“价格”:0,“促销”:0,“状态”:“预订”;“2017-02-16:{“可用”:0,“绑定”:0,“信息”:“备注”:“价格”:0,“促销”:0,“状态”:“预订”
PHP7中的操作顺序发生了一些变化(请参阅)。我怀疑您可能需要在可用的$j_decode->$data['''u kfdTourDate']->中使用一些括号,以使其按照您想要的顺序进行计算。如前所述
在php 5.6.3中,允许使用以下表达式:
echo $json_decode->$data['_kfdTourDate']->available;
因此,您正在尝试访问$data[''u kfdTourDate']
的值,它是$json\u decode
对象中的元素
例如:
在PHP7中
现在可以间接访问变量、属性和方法
严格按照从左到右的顺序评估,而不是以前的顺序
特殊情况的组合。下表显示了
评价发生了变化
因此,解释器将按如下方式解释此代码:
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[''u kfdTourDate']
只是一个值;是$j\u decode->$data[''u kfdTourDate']->可用的数组?如果没有实际的数组结构,很难维护;似乎您正在从\u kfdTourDate
访问未知变量,这将返回一个字符串2017-03-16
。可能您的linux服务器没有错误的原因是因为错误报告被禁用。Woaww@Semi-Friends谢谢!这就是原因具体发生了什么。谢谢你的接班人。我会玩它,并让你知道结果。@hassan,更新了我的帖子。你能检查一下吗?它可能会让你对我的问题有更多的了解。谢谢你的链接。它非常有用。我会尝试更改括号,并让你知道结果。更新了我的帖子。你能帮我修改一下吗对呀?这可能会让你对我的问题有更多的了解,我用括号玩的时候没用。难以置信!太简单了。谢谢你的详细解释。我相信很多像我这样的人都会从这篇文章中受益。