【问题标题】:Use of unset and count with arrays在数组中使用 unset 和 count
【发布时间】:2017-04-12 01:28:10
【问题描述】:

我有一个数组,其中包含其他数组,其中包含每个用户的详细信息。例如:

$_SESSION["ActQueue"] = [["J.Paul", "John", "Paul", "0000-00-00 00:00:00"],["J.Bloggs", "Joe", "Bloggs", "0000-00-00 00:00:00"]]

我编写了一些代码,旨在将数组中第一个用户的“帐户等级”转换为数据库中的“Cadet”。然后代码从数组中删除用户,然后应该回显 data = 1 或列表中的下一个用户,具体取决于它们是否存在。我已经使用以下代码完成了此操作,但是我发现当 unset 删除第一项时,它的键不会向下移动 1,因此 0 将根本不存在,而 1 仍将是“J.Bloggs”。因此,当回显下一个用户时,不会发送任何值。有什么建议吗?

<?php
session_start();

require "classes.php";
$TF = new TF_Core ();

$ActQueueAccept = "UPDATE users 
    SET rank = 'Cadet' 
    WHERE username = ?";

if ($statement = TF_Core::$MySQLi->DB->prepare($ActQueueAccept)) {
    $statement->bind_param('s',$_SESSION["ActQueue"][0][0]);
    $statement->execute();
}

unset($_SESSION["ActQueue"][0]);

if(count($_SESSION["ActQueue"] != 0)){
    echo json_encode(['Username'=>$_SESSION["ActQueue"][0][0], 'Surname'=>$_SESSION["ActQueue"][0][1],'Forename'=>$_SESSION["ActQueue"][0][2],'Joined'=>$_SESSION["ActQueue"][0][3]]);
}
else{
    $data =  1;
    echo $data;
}
?>

【问题讨论】:

  • 在 json_encode 中,索引仅为 0 $_SESSION["ActQueue"][0][0] 这应该是 $_SESSION["ActQueue"][1][0] 对所有人都一样
  • 只检查代码:- eval.in/686735 。让我们知道发生了什么
  • 我不太清楚你的意思。如果您说我应该回显 $_SESSION["ActQueue"][1][0],那么它将不起作用,因为包含数据的第一项必须为 0。否则我循环的次数越多,第一个用户被转移回来,所以我最终会做 $_SESSION["ActQueue"][45][0].理论上它会起作用,但要跟踪从数组中删除了多少次东西似乎太费力了。
  • @Anant,这到底是做什么的。似乎您正在完成每个项目而不是第一个 1 的过程。此外,您使用 unset($_SESSION["ActQueue"][$key][0]) 的地方只会删除“J.Paul”和不是关于他的其他信息,比如他的名字或姓氏?
  • unset($_SESSION["ActQueue"][$key][0]);中删除[0]

标签: php arrays count unset


【解决方案1】:
unset($_SESSION["ActQueue"][0]);
$_SESSION["ActQueue"] = array_values($_SESSION["ActQueue"]);

似乎unset() 并不总是重置数组键。函数 array_values 使用正确的键/索引重新定义我的数组。

【讨论】:

    猜你喜欢
    • 2018-07-25
    • 2013-01-09
    • 2019-11-27
    • 2015-10-01
    • 2015-01-19
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 2013-07-19
    相关资源
    最近更新 更多