【问题标题】:Unset array element and reseting array values in PHP在 PHP 中取消设置数组元素并重置数组值
【发布时间】:2017-03-10 01:19:55
【问题描述】:

所以我有 2 个文件。在文件 1 中,我有一个表,在那里我随机选择一些字段并将它们存储(存储在会话中)在二维数组的数组中。当我单击单元格时,我将此数据发送到我的文件 2 中,我想检查我是否单击了随机选择的数组,如果我这样做了,我想从主数组中删除这个二维数组。 但是,只要我单击其中一个选定的阵列,阵列就会崩溃。

文件 1 PHP 对此很重要:

 session_start();
$_SESSION['arrays'] =  $stack ;

文件 2 PHP:

session_start();

if (isset($_SESSION['arrays'])) {

    $stack = $_SESSION['arrays'];

    for ($i = 0; $i< count($stack);$i++){
        if($cooridnates == $stack[$i]){

            unset($stack[$i]);
            array_values($stack);
            $i--;
            $Result = true;
            break;
        }
    }
    $_SESSION['arrays'] =   $stack ;

我怀疑错误可能在于两件事:

  1. count($stack) 使用过,但我不认为这是主要原因。

  2. 我存储会话的方式。

我尝试使用 W3Schools 和官方 PHP 网站以及 SOF 的手册,但没有用。 但是,我仍然不确定 array_values() 和 unset() 是否正常工作,因为事情发生了碰撞,我无法正确测试它。

如果有任何提示,我将不胜感激。

【问题讨论】:

  • 你的 for 语句似乎没有右括号。
  • @DzmitryKushnarou 抱歉,拼写错误...

标签: php arrays session session-variables


【解决方案1】:

您需要将array_values($stack); 的结果分配回$stack 变量。

$stack = array_values($stack);

当你这样做时也没有必要使用$i--,因为你在找到匹配之后就跳出了循环。

你可以使用array_search()来代替循环:

$pos = array_search($coordinates, $stack);
if ($pos !=== false) {
    unset $stack[$pos];
    $Result = true;
    $stack = array_values($stack);
    $_SESSION['arrays'] = $stack;
}

【讨论】:

  • 您先生是个天才。我绝对确定我以正确的方式使用它。我正在使用官方 PHP 站点寻求帮助,但我想我没有正确使用它。我总是喜欢从更有经验的会员那里得到很好的建议,我可以从中学到很多东西。
  • @JakaStudent7 很少有函数会就地修改数组。唯一常见的例外是排序函数和像array_push 这样的函数。在大多数其他情况下,会返回一个新数组,您必须将其分配到某个地方。
  • “array_splice()”函数的使用方式和array_values()一样吗?因为我一开始就试图使用它。但它没有用。所以我选择了 unset 和 array_values。
  • array_splice() 修改了数组——这就是它和array_slice() 的区别。
  • 哦,谢谢。你是一个真正的MVP。附言抱歉,我在 Jain 帖子的评论中说 Barmer,但我刚刚意识到我犯了一个拼写错误,无法再修复它
【解决方案2】:

你可以通过使用 foreach 循环来做到这一点:

session_start();
if (!empty($_SESSION['arrays'])) {
    foreach( $_SESSION['arrays'] as $key => $val){
       if($cooridnates == $val){
             unset($_SESSION['arrays'][$key]); // if you want this removed value then assign it a variable before unsetting the array
             $Result = true;
             break;
        }
    }
 }

【讨论】:

  • @Jain 这也应该可以,但是因为我对 PHP 等很陌生。我认为 Barmer 的解决方案在未来更容易实现和修改。
  • 这缺少对 array_values() 的调用,以便在删除元素后重新编号数组的所有元素。
  • @jaka 如果您使用 foreach 循环,无论您使用什么 $index,它都会在每个元素上迭代,无论数组是否在 array(1=&gt;5) 上具有单个值,如果您只想从会话中取消设置字段您可以在目录中取消设置字段,那么为什么要使用另一个变量并为其赋值两次。
  • @SudhanshuJain 这实际上是一个好主意。我喜欢你向我解释这一点的方式。好的,我将实现它并在将来使用它。谢谢你。 + 再次感谢您的简单解释。
猜你喜欢
  • 2020-03-24
  • 2013-10-23
  • 2011-11-02
  • 2012-01-10
  • 1970-01-01
  • 1970-01-01
  • 2018-07-16
  • 2011-03-04
  • 1970-01-01
相关资源
最近更新 更多