Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从PHP会话数组中删除变量_Php_Arrays_Session - Fatal编程技术网

如何从PHP会话数组中删除变量

如何从PHP会话数组中删除变量,php,arrays,session,Php,Arrays,Session,我有用于向会话添加变量的PHP代码: <?php session_start(); if(isset($_GET['name'])) { $name = isset($_SESSION['name']) ? $_SESSION['name'] : array(); $name[] = $_GET['name']; $_SESSION['name'] = $name; } if (isset($_POST

我有用于向会话添加变量的PHP代码:

<?php
    session_start();
    if(isset($_GET['name']))
    {
        $name = isset($_SESSION['name']) ? $_SESSION['name'] : array();
        $name[] = $_GET['name'];
        $_SESSION['name'] = $name;
    }
    if (isset($_POST['remove']))
    {
        unset($_SESSION['name']);
    }
?>
<pre>  <?php print_r($_SESSION); ?>  </pre>

<form name="input" action="index.php?name=<?php echo $list ?>" method="post">
  <input type="submit" name ="add"value="Add" />
</form>

<form name="input" action="index.php?name=<?php echo $list2 ?>" method="post">
  <input type="submit" name="remove" value="Remove" />
</form>


要从会话中删除特定变量,请使用:

unset($_SESSION['variableName']);
()或

注意:
session\u unregister()
从PHP 5.3.0起已被弃用,从PHP 5.4.0起已被删除。

尝试以下方法:

$ar[0]==2
$ar[1]==7
$ar[2]==9

unset ($ar[2])

当前正在清除名称数组,需要调用该数组,然后调用要在数组中取消设置的索引:

<?php
# remove by key:
function array_remove_key ()
{
  $args  = func_get_args();
  return array_diff_key($args[0],array_flip(array_slice($args,1)));
}
# remove by value:
function array_remove_value ()
{
  $args = func_get_args();
  return array_diff($args[0],array_slice($args,1));
}

$fruit_inventory = array(
  'apples' => 52,
  'bananas' => 78,
  'peaches' => 'out of season',
  'pears' => 'out of season',
  'oranges' => 'no longer sold',
  'carrots' => 15,
  'beets' => 15,
);

echo "<pre>Original Array:\n",
     print_r($fruit_inventory,TRUE),
     '</pre>';

# For example, beets and carrots are not fruits...
$fruit_inventory = array_remove_key($fruit_inventory,
                                    "beets",
                                    "carrots");
echo "<pre>Array after key removal:\n",
     print_r($fruit_inventory,TRUE),
     '</pre>';

# Let's also remove 'out of season' and 'no longer sold' fruit...
$fruit_inventory = array_remove_value($fruit_inventory,
                                      "out of season",
                                      "no longer sold");
echo "<pre>Array after value removal:\n",
     print_r($fruit_inventory,TRUE),
     '</pre>';
?> 
if (isset($_POST['remove'])) {
    $key=array_search($_GET['name'],$_SESSION['name']);
    if($key!==false)
    unset($_SESSION['name'][$key]);
    $_SESSION["name"] = array_values($_SESSION["name"]);
} 
在数组中取消设置值的两种方法:

<?php
# remove by key:
function array_remove_key ()
{
  $args  = func_get_args();
  return array_diff_key($args[0],array_flip(array_slice($args,1)));
}
# remove by value:
function array_remove_value ()
{
  $args = func_get_args();
  return array_diff($args[0],array_slice($args,1));
}

$fruit_inventory = array(
  'apples' => 52,
  'bananas' => 78,
  'peaches' => 'out of season',
  'pears' => 'out of season',
  'oranges' => 'no longer sold',
  'carrots' => 15,
  'beets' => 15,
);

echo "<pre>Original Array:\n",
     print_r($fruit_inventory,TRUE),
     '</pre>';

# For example, beets and carrots are not fruits...
$fruit_inventory = array_remove_key($fruit_inventory,
                                    "beets",
                                    "carrots");
echo "<pre>Array after key removal:\n",
     print_r($fruit_inventory,TRUE),
     '</pre>';

# Let's also remove 'out of season' and 'no longer sold' fruit...
$fruit_inventory = array_remove_value($fruit_inventory,
                                      "out of season",
                                      "no longer sold");
echo "<pre>Array after value removal:\n",
     print_r($fruit_inventory,TRUE),
     '</pre>';
?> 
if (isset($_POST['remove'])) {
    $key=array_search($_GET['name'],$_SESSION['name']);
    if($key!==false)
    unset($_SESSION['name'][$key]);
    $_SESSION["name"] = array_values($_SESSION["name"]);
} 


由于
$\u会话['name']
是一个数组,因此需要找到指向感兴趣的名称值的数组键。最后一行重新排列数组的索引以供下次使用。

美元会话['name']变量是数组吗?如果要从数组中删除特定的键,必须在unset()调用中引用该键,否则将删除整个数组,例如

<?php
    $_SESSION['foo'] = 'bar'; // set session 
    print $_SESSION['foo']; //print it
    unset($_SESSION['foo']); //unset session 
?>
代码片段的另一个小问题是:将GET查询参数与POST表单混合在一起。有什么原因不能在隐藏字段中传递“name”的表单吗?最好不要混合使用get和post变量,尤其是在其他地方使用$\u请求时。您可能会遇到各种各样的乐趣,试图弄清楚为什么$\u GET['name']与$\u POST['name']的显示方式不同,因为服务器在'variables\u order'.ini设置中设置了不同的EGPCS顺序



如果要删除或取消设置所有$\u会话,请尝试此操作


如果要删除特定的$\u会话['name'],请尝试此操作


简单地使用这个方法



@Anthony如果它不在标签内,你可以。噢!我没有看到它不是(手掌放在额头上)它从数组中删除所有值,而不是单个值:(如果您试图“删除”/“取消设置”的变量是一个数组,那么该数组将被删除。例如$\u会话['myarray']=array('key'=>val,'key2'=>val2);usnet($\u会话['myarray']将取消设置数组…但是取消设置($\u会话['myarray']['key2']将删除第二个数组元素-(key,value)pairsession_unregister()“此函数从PHP 5.3.0起已被弃用,从PHP 5.4.0起被删除。”;
<form blah blah blah method="post">
  <input type="hidden" name="name" value="<?= htmlspecialchars($list1) ?>" />
  <input type="submit" name="add" value="Add />
</form>
session_destroy();
session_unset('name');
<?php
    $_SESSION['foo'] = 'bar'; // set session 
    print $_SESSION['foo']; //print it
    unset($_SESSION['foo']); //unset session 
?>