当所有检索值在laravel中具有相同的会话键时,如何检查会话数组是不是具有唯一的ID

Posted

技术标签:

【中文标题】当所有检索值在laravel中具有相同的会话键时,如何检查会话数组是不是具有唯一的ID【英文标题】:How to check if session array has an id which is unique when all retrieve value has same session key in laravel当所有检索值在laravel中具有相同的会话键时,如何检查会话数组是否具有唯一的ID 【发布时间】:2020-04-21 14:11:07 【问题描述】:

我正在开发一个测验网络应用程序,我正在从数据库中随机获取我的数据,并将其保存在会话数组中。现在我想检查检索到的数据的 id 是否在会话数组中,如果是,我想生成一个新值,如果不在我想将它推送到我搜索过但无法弄清楚的数组中任何帮助将不胜感激。

这是我最初所做的,但会话存在总是返回 true,因为我使用的是相同的密钥;

 function random()
        
            $output=DB::table('questions')->inRandomOrder()->first();
            return $output;
        

        function checkRandomvalue($stored)

           if(session()->exists('question'))
               
                random();

              

                session()->push('question',$stored);    
        
        do
            $r=random();
            $result=checkRandomvalue($r);
        
        while($result);

这就是我现在所做的 checkRandomvalue 函数但是这个 $question=session('question.0.id',[]);正在返回 null 使索引始终为假

function checkRandomvalue($stored)

       $id=$stored->id;
       $question=session('question.0.id',[]);

       $index=array_search($id,$question);
        //dd($index);
       if($index==true)
           
              random();
          
              $question[]=$id; 
              session()->put('question',$id);  
    

【问题讨论】:

random(); 是什么?它应该是 $id = random();代替? 尝试从会话第二个参数中删除数组[] @daremachine 谢谢 random() 是对生成随机数的函数的随机调用。如果我删除 [] 作为第二个参数,我会收到此错误“array_search() 需要参数 2为数组,给定空值”,因为问题将不再是一个数组,并且 array_search 然后抛出上述错误 【参考方案1】:

如果有人遇到同样的问题,我终于解决了我的问题,我在构造函数中声明了 2 个会话,一个用于存储数组,第二个用于保存不在数组中的会话值,因此我可以用它查询我的数据库

 public function __construct()
   
    $this->middleware('auth');
       $val=[12];
       $rand=$val[0];
       Session::put('keys',$val);
       $value=session('keys');  
       Session::put('Key2',$rand);
       $v_random=session('Key2');

那么这是我的逻辑方法

    function random()
        
            $output=DB::table('questions')->inRandomOrder()->first();
            return $output;
        

        function checkRandomvalue($stored)
            global $value;
            global $v_random;
            $id=$stored->id;
            $value=session('keys');
            if(array_search($id,$value,true)==true) 

               return;

            else if(array_search($id,$value,true)==false)
                Session::push('keys',$id);
                session()->save();
                $value=session('keys');
                Session::put('Key2',$id);
                //$v_random=session('Key2');
                //dd("good", $id, $value);
               //dd(session($key));;  
               
         
        do

            $r=random();
            $result=checkRandomvalue($r);   
        
        while($result);
       $v_random=session('Key2');
        $output=DB::table('questions')->where('id',$v_random)->get();

【讨论】:

以上是关于当所有检索值在laravel中具有相同的会话键时,如何检查会话数组是不是具有唯一的ID的主要内容,如果未能解决你的问题,请参考以下文章

在 laravel 5.1 中打印所有正在运行的会话变量

Laravel:当表有两个外键时,为具有关系的数据库表播种

Laravel 无法检索保存在 POST 请求中的会话数据

页脚值在 laravel 的 foreach 中打印相同的数据

当少数表没有主键时,sqoop import-all 具有并行性

Laravel - 在给定用户的经度和纬度时检索距离时,我在所有模型上都得到相同的结果。为啥?