【问题标题】:PHP Unset Array value effect on other indexesPHP Unset Array 值对其他索引的影响
【发布时间】:2011-09-16 15:06:28
【问题描述】:

我正在处理一个 PHP 循环,我有一个关于未设置如何影响数组键的问题。该数组使用 PHP 分配的标准数字键 0, 1, 2, 3 etc...。每当unset() 在数组值上运行时,数组键是打乱的还是像以前一样维护?

感谢您的宝贵时间。

【问题讨论】:

  • 这是你可以自己尝试的东西......
  • 他本可以自己尝试,但现在这个问题在这里得到巩固,这对于简单的未设置谷歌搜索很重要。它肯定对我有帮助,所以我感谢 Oliver。
  • @SweetChillyPhilly 这不是 SO 第一次取代文档/琐碎示例。很高兴它有帮助。

标签: php arrays unset


【解决方案1】:

键不会被打乱或重新编号。 unset() 键被简单地删除,而其他的则保留。

$a = array(1,2,3,4,5);
unset($a[2]);
print_r($a);

Array
(
    [0] => 1
    [1] => 2
    [3] => 4
    [4] => 5
)

【讨论】:

  • @Michael 我们可以从4 之类的数组中删除特定值,只有一个unset()
  • @Rafee 你的意思是用一个unset() 删除多个值吗?如果是这样,您可以使用 array_diff() 返回一个不包含您想要删除的值的新数组。
【解决方案2】:

自己测试一下,这里是输出。

php -r '$a=array("a","b","c"); print_r($a); unset($a[1]); print_r($a);'
Array
(
    [0] => a
    [1] => b
    [2] => c
)
Array
(
    [0] => a
    [2] => c
)

【讨论】:

    【解决方案3】:

    他们本来就是这样。那个键被删除了

    【讨论】:

      【解决方案4】:

      无论是否为数字,键都会消失。试试下面的测试脚本。

      <?php
          $t = array( 'a', 'b', 'c', 'd' );
          foreach($t as $k => $v)
              echo($k . ": " . $v . "<br/>");
          // Output: 0: a, 1: b, 2: c, 3: d
      
          unset($t[1]);
      
          foreach($t as $k => $v)
              echo($k . ": " . $v . "<br/>");
          // Output: 0: a, 2: c, 3: d
      ?>
      

      【讨论】:

        【解决方案5】:

        这可能有点脱离上下文,但在从全局数组中取消设置值时,请应用上面 Michael Berkowski 的答案,但与 $GLOBALS 一起使用,而不是使用 global $variable_name 声明的全局值。所以它会是这样的:

        unset($GLOBALS['variable_name']['array_key']);

        代替:

        global $variable_name; unset($variable_name['array_key']);

        注意:这仅在您使用全局变量时有效。

        【讨论】:

          【解决方案6】:

          删除的密钥丢失时保留密钥,但可以通过执行以下操作重新排列它们:

          $array = array(1,2,3,4,5);
          unset($array[2]);
          $arranged = array_values($array);
          print_r($arranged);
          

          输出:

          Array
          (
              [0] => 1
              [1] => 2
              [2] => 4
              [3] => 5
          )
          

          请注意,如果我们在不重新排列的情况下执行以下操作:

          unset($array[2]);
          $array[]=3;
          

          值 3 的索引将是 5,因为它将被推到数组的末尾,并且不会尝试检查或替换丢失的索引。在将 FOR LOOP 与索引访问一起使用时,记住这一点很重要。

          【讨论】:

            猜你喜欢
            • 2011-08-12
            • 2011-09-25
            • 1970-01-01
            • 2012-03-19
            • 1970-01-01
            • 2013-08-06
            • 2019-05-03
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多