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或日期的新选项卡。。。 因此,如何在会话中检查该阵列:

  • 如果设置:用户id和项目id和开始日期和结束日期是否存在
  • 如果不存在,如何使用这些新值向该多数组添加新数组
  • 如果存在“是”,如何仅覆盖数组中所选数组的['preBookHash']
  • 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());
    }