从Laravel会话数组中删除项目

Jak*_*chs 12 php arrays session laravel

我试图从Laravel会话阵列中删除项目,但到目前为止没有运气.

我使用Session :: push()方法将我的值存储在Session数组中:

  Session::push('event_date_display', Input::get('event_date'));
  Session::push('event_start_display', Input::get('event_start'));
  Session::push('event_entry_display', Input::get('event_entry'));
  Session::push('event_end_display', Input::get('event_end'));
Run Code Online (Sandbox Code Playgroud)

我可以像普通数组一样访问这些值:

        @for($i=0;$i<Session::get('dates');$i++)
          <tr>
            <td>{{ Session::get('event_date_display')[$i] }}</td>
            <td>{{ Session::get('event_start_display')[$i] }}</td>
            <td>{{ Session::get('event_entry_display')[$i] == '' ? '-' : Session::get('event_entry_display')[$i] }}</td>
            <td>{{ Session::get('event_end_display')[$i] == '' ? '-' : Session::get('event_end_display')[$i] }}</td>
            <td><a href="{{URL::route('termin-loeschen', $i)}}" class="del"><span class="icon-spam"></span>Loeschen {{ $i }}</a></td>
          </tr>
        @endfor
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何删除它们.我尝试了Session :: forget('event_date_display')[$ index],但这会删除整个数组.然后我尝试循环和取消设置,这也不起作用.任何帮助表示赞赏.

pat*_*shi 26

当您调用Session::forget('event_data_display')[$index]时,该$index变量无法传递给该forget()方法.所以Laravel不会看到它,并且会取消设置Session数组的整个'event_data_display'索引.

要取消设置该索引的值,您可能需要执行以下操作:

$event_data_display = Session::get('event_date_display');
unset($event_data_display[$index]);
Session::set('event_data_display', $event_data_display);
Run Code Online (Sandbox Code Playgroud)

Laravel的Session支持通过指定的索引添加到数组,如下所示:

Session::push('user.teams', 'developers');
Run Code Online (Sandbox Code Playgroud)

所以你也可以像这样访问数组的索引:

Session::forget('event_data_display.' . $i);
Run Code Online (Sandbox Code Playgroud)

我没试过,但值得一试.

当你调用时Session::get('event_data_display')[$i],可行的原因是因为PHP Session::get('event_data_display') 查找存储在$i索引中的值之前检索数组值.

当您调用时Session::forget('event_data_display'),该forget()方法只能对传递给它的内容起作用.

  • 这个答案的+1代表`Session :: forget('event_data_display.'.$ i);` (3认同)