试图从数组中删除一个项目,但它不会工作

时间:2012-04-09 13:53:05

标签: php arrays

我真的不明白为什么这不起作用,我正在返回正确的标题,但该项仍然在数组中!

以下是从数组代码中删除:

<?php
session_start();
if ( !isset($_SESSION['username']) )
{
  header("Location:loginform.php");
  exit();
}

foreach ($_SESSION['list'] as $key => $disk)
{
  if (($_SESSION['list'][$key]['bookisbn']) - ($_GET['bookisbn'])== 0)
  {
    unset($_SESSION['list'][$key]);
    break;
  }
}
header("Location: ".$_GET['location']);
exit();
?>

感谢您提供任何帮助

4 个答案:

答案 0 :(得分:0)

这只是猜测,但问题可能在于

$_GET['bookisbn']

被视为字符串。因此,如果将其强制转换为int if语句将返回true从中删除项目 阵列。

介绍此代码:

// Casting the ISBN to an integer here
$bookISBN = (int) $_GET['bookisbn'];

if( ($_SESSION['list'][$key]['bookisbn'] - $bookISBN) == 0 ) {
    // Unset item
}

答案 1 :(得分:0)

在标题之前尝试session_write_close()。也许不是在攒钱。

你也可以这样做:

$mydata = $_SESSION['list'] ;

//do something with $mydata

$_SESSION['list'] = $mydata;

如果您有其他类型的错误,它将使代码更容易阅读,这样您就不会再犯同样的错误了。

答案 2 :(得分:0)

我会听Artragis,但也试试这个:

每个变量都有括号,但实际上减法必须等于零。所以,而不是:

if (($_SESSION['list'][$key]['bookisbn']) - ($_GET['bookisbn'])== 0)
{
    unset($_SESSION['list'][$key]);
    break;
}

尝试:

if (($_SESSION['list'][$key]['bookisbn'] - $_GET['bookisbn']) == 0)
{
    unset($_SESSION['list'][$key]);
    break;
}

修改

我也会将Session和GET变量同时转换为INT,就像其他提到的海报一样。

答案 3 :(得分:-1)

您需要调试并测试是否可以访问未设置的行。

您需要调试意味着您需要验证每个程序的步骤和每个变量 您需要测试是否可以访问未设置的行意味着您必须在未设置的位置回显某些内容:

foreach ($_SESSION['list'] as $key => $disk)
{
  var_dump("---\n",$_SESSION['list'][$key]['bookisbn'],$_GET['bookisbn']);
  var_dump($_SESSION['list'][$key]['bookisbn'] - $_GET['bookisbn']);
  var_dump($_SESSION['list'][$key]['bookisbn'] - $_GET['bookisbn'] == 0);

  if ($_SESSION['list'][$key]['bookisbn'] - $_GET['bookisbn'] == 0)
  {
    unset($_SESSION['list'][$key]);
    var_dump($_SESSION['list']);
    break;
  }
}
//comment out header to prevent moving out of page
#header("Location: ".$_GET['location']);
exit();

运行此代码并查看是否有任何值错误或意外。