php unset array из 2d сессии - PullRequest
       1

php unset array из 2d сессии

2 голосов
/ 25 апреля 2011

Я добавляю материал в 2d массив, как это:

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

как бы удалить все массивы из сеанса, которые имеют 'модель' = для переменной по моему выбору? (примечание: в сеансе всегда будет много массивов с одной и той же моделью.)

Я попробовал следующее, но, похоже, он ничего не удаляет из моего массива сессий:

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

Спасибо!

Ответы [ 6 ]

5 голосов
/ 25 апреля 2011
$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]);
    }
}
5 голосов
/ 25 апреля 2011

$ транспортное средство передается копией, поэтому неустановленное $ транспортное средство ничего не делает

$model = "toyota";
foreach ($_SESSION['vehicles'] as $idx => $vehicle){
    if($vehicle['model'] == $model){
        unset($_SESSION['vehicles'][$idx]);
    }
}
4 голосов
/ 25 апреля 2011

Вы должны:

  • перебрать ваши машины
  • для каждого транспортного средства, проверьте, является ли его модель той, которую вы ищете
  • и если да, удалите его:


Который может быть переведен частью кода, подобного этому:

$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]);
    }
}
3 голосов
/ 25 апреля 2011
foreach($_SESSION['vehicles'] as $key => $vehicle) {
    if($vehicle['model'] == "toyota") {
        unset($_SESSION['vehicles'][$key]);
    }
}

Должен это сделать.

Мне нужно написать свои ответы быстрее.

2 голосов
/ 25 апреля 2011

то, что вы пытаетесь удалить, это $vehicle['toyota'], которого нет в массивах

, попробуйте вместо этого ..

$model = "toyota";
foreach ($_SESSION['vehicles'] as $key=>$vehicle) 
{
    if($model == $vehicle['model']) {
         unset($_SESSION['vehicles'][$key]);
    }    
}
0 голосов
/ 25 апреля 2011

Сначала обратите внимание, что $ _SESSION ['Vehicles'] - это пронумерованный массив, поэтому $ vehicle [$ model] просто не может работать. Далее, чтобы изменить элемент в цикле foreach:

Начиная с PHP 5, вы можете легко изменить элементы массива, предшествующие $ value с &. Это назначит ссылку вместо копирования значения.

$model = "toyota";
foreach ($_SESSION['vehicles'] as &$vehicle) 
{
    if ($vehicle['model'] == $model)
         unset($vehicle);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...