Php 会话中的Laravel多维数组,正在查找,正在覆盖
我想在会话中保留多维数组:Php 会话中的Laravel多维数组,正在查找,正在覆盖,php,laravel,session,multidimensional-array,Php,Laravel,Session,Multidimensional Array,我想在会话中保留多维数组: $preBookDataToCompare = []; $preBookDataToCompare['preBookHash'] = $this->hashString($dataToHash); $preBookDataToCompare['user_id'] = $user_id; $preBookDataToCompare['item_id'] = $item_id; $preBookDataToCompare['s
$preBookDataToCompare = [];
$preBookDataToCompare['preBookHash'] = $this->hashString($dataToHash);
$preBookDataToCompare['user_id'] = $user_id;
$preBookDataToCompare['item_id'] = $item_id;
$preBookDataToCompare['start_date'] = $start_date->toDateString();
$preBookDataToCompare['end_date'] = $end_date->toDateString();
Session::push('preBookDataToCompare',$preBookDataToCompare)
数组是在用户打开页面之后生成并添加到会话中的。
他可以打开带有不同项目id或日期的新选项卡。。。
因此,如何在会话中检查该阵列:
dd(Session::get(“preBookDataToCompare”)代码>
显示:
您可以使用laravel的收集方法contains()
,该方法可以得到闭包。您也可以使用foreach和普通PHP来实现这一点。我更喜欢集合,所以您不必检查会话值是否为空
<?php
$newItem = [
'someKey' => 'somevalue',
'otherkey' => 'othervalue'
];
// Get existing session data
$sessionData = collect($session->get('preBookDataToCompare'));
// Check if new item already exists matching key value pairs
$alreadyExists = $sessionData->contains(function($value) use($newItem){
return $newItem == $value;
});
// Add if item does not exist
if(!$alreadyExists){
$sessionData->push($newItem);
session()->put('preBookDataToCompare', $sessionData->toArray());
}
使用Session::put()
而不是Session::push()
。这应该会替换会话值。我以前使用过PUT,但我不想替换,如果出现差异值,我希望在多个数组中使用新数组。如果要防止多维数组中出现重复值,则必须循环检查现有数据。@Phaelaxz,foreach(session::get(“preBookDataToCompare”)as$item=>$key){if($key['user\U id']==$user\U id&&$key['item\U id']==$item\U id&&$key['start\U date']==$start\U date']=$end\U date->toDateString()//如何在该数组中覆盖['preBookHash']('preBookDataToCompare',$preBookDataToCompare);//但这并不能阻止双精度:()}//如何修改它来为我工作?????数组中的每个元素都是5个值的数组,什么决定了重复?如果5个值中只有1个匹配?或者只有5个值都匹配?或者我们可以只查看bookHash吗?如果我们可以只查看该散列中的重复项,则将其用作父数组中的键。然后可以使用数组\u key_exists()谢谢,我根据需要对现有哈希进行了一些修改。我已经用纯PHP解决了这个问题,但我更喜欢你的方法,我学到了一些新东西:)
<?php
$newItem = [
'someKey' => 'somevalue',
'otherkey' => 'othervalue'
];
// Get existing session data
$sessionData = collect($session->get('preBookDataToCompare'));
// Check if new item already exists matching key value pairs
$alreadyExists = $sessionData->contains(function($value) use($newItem){
return $newItem == $value;
});
// Add if item does not exist
if(!$alreadyExists){
$sessionData->push($newItem);
session()->put('preBookDataToCompare', $sessionData->toArray());
}