【问题标题】:php unset array from 2d session arrayphp unset array from 2d session array
【发布时间】:2011-08-12 07:11:35
【问题描述】:

我正在像这样向二维数组添加东西:

 $_SESSION['vehicles'][] = array ('model' => $_REQUEST['blah1'], 'price' => $_REQUEST['blah2'], 'year' => $_REQUEST['blah3']);  

如何从会话中将所有具有“模型”= 的数组删除到我选择的变量中? (注意:会话中总会有许多具有相同模型的数组。)

我尝试了以下方法,但它似乎没有从我的会话数组中删除任何内容:

$model = "toyota";
foreach ($_SESSION['vehicles'] as $vehicle) 
{
    unset($vehicle[$model]);
}

谢谢!

【问题讨论】:

    标签: php html arrays session


    【解决方案1】:

    $vehicle 是通过副本传递的,所以,unset $vehicle 什么都不做

    $model = "toyota";
    foreach ($_SESSION['vehicles'] as $idx => $vehicle){
        if($vehicle['model'] == $model){
            unset($_SESSION['vehicles'][$idx]);
        }
    }
    

    【讨论】:

      【解决方案2】:
      $model = 'toyota';
      
      // PHP <= 5.2
      $_SESSION['vehicles'] = array_filter($_SESSION['vehicles'],
                    create_function('$v', "return \$v['model'] != '$model';"));
      
      // PHP 5.3+
      $_SESSION['vehicles'] = array_filter($_SESSION['vehicles'],
                    function ($v) use ($model) { return $v['model'] != $model; });
      

      或者,你的方法:

      foreach ($_SESSION['vehicles'] as $key => $vehicle) {
          if ($vehicle['model'] == $model) {
              unset($_SESSION['vehicles'][$key]);
          }
      }
      

      【讨论】:

      • 最后一个代码是剪断了未定义的行为(有效,但本身是未定义的)还是在您当前迭代的数组中取消设置键好吗? +1
      • @nikic 它工作得很好,foreach 工作在数组的副本上。
      【解决方案3】:

      你必须:

      • 迭代您的车辆
      • 对于每辆车,测试其型号是否是您正在寻找的车型
      • 如果是,删除它:


      可以通过像这样的部分代码来翻译:

      $model = "toyota";
      foreach ($_SESSION['vehicles'] as $key => $vehicle) 
      {
          if ($vehicle['model'] == $model) {
              // The current vehicle's model is what you are searching for
              // => delete if from $_SESSION
              unset($_SESSION['vehicles'][$key]);
          }
      }
      

      【讨论】:

        【解决方案4】:
        foreach($_SESSION['vehicles'] as $key => $vehicle) {
            if($vehicle['model'] == "toyota") {
                unset($_SESSION['vehicles'][$key]);
            }
        }
        

        应该这样做。

        我需要更快地写下我的答案。

        【讨论】:

          【解决方案5】:

          您要删除的是数组中不存在的$vehicle['toyota']

          试试这个吧..

          $model = "toyota";
          foreach ($_SESSION['vehicles'] as $key=>$vehicle) 
          {
              if($model == $vehicle['model']) {
                   unset($_SESSION['vehicles'][$key]);
              }    
          }
          

          【讨论】:

            【解决方案6】:

            首先要注意 $_SESSION['vehicles'] 是一个编号数组,所以 $vehicle[$model] 不能工作。接下来在foreach循环中修改item:

            从 PHP 5 开始,您可以轻松修改 数组的元素由前面的 $value 和 &。这将分配参考 而不是复制值。

            $model = "toyota";
            foreach ($_SESSION['vehicles'] as &$vehicle) 
            {
                if ($vehicle['model'] == $model)
                     unset($vehicle);
            }
            

            【讨论】:

            • 当他在做 &$vehicle 而不是 $vehicle 时,他正在处理实际元素,而不是副本。
            猜你喜欢
            • 2012-03-19
            • 2022-11-29
            • 2016-10-23
            • 2011-09-16
            • 1970-01-01
            • 2021-05-05
            • 1970-01-01
            • 2020-12-11
            • 2021-11-01
            相关资源
            最近更新 更多