【问题标题】:Removing key from associative array从关联数组中删除键
【发布时间】:2018-09-16 20:00:58
【问题描述】:

我想根据值删除某个值。在这种情况下的示例,我想从数组中删除Tom,然后下一个数据将继续使用Tom 之前使用的数字。

这是我的例子:

    $array = array(0 => "Emily", 1 => "Tom", 2 => "Peter");
    if ($k = array_search($csR, $array)!==false)
            unset($array[$k]);

结果应该是:

array(0 => "Emily", 1 => "Peter");

【问题讨论】:

  • 使用 array_values 来“修复”键。
  • 你放弃了吗???

标签: php arrays key unset


【解决方案1】:

由于您使用的是索引数组,因此最好的方法是使用array_values()

$csR = 'Tom';
$array = array(0 => "Emily", 1 => "Tom", 2 => "Peter");
if ($k = array_search($csR, $array)!==false)
{
    unset($array[$k]);
    $array = array_values($array);
}
print_r($array);

【讨论】:

    【解决方案2】:

    直接来自PHP: Arrays的文档

    注意: unset() 函数允许从数组中删除键。请注意,该数组不会被重新索引。如果需要真正的“删除和移动”行为,可以使用 array_values() 函数重新索引数组。

    <?php
    $a = array(1 => 'one', 2 => 'two', 3 => 'three');
    unset($a[2]);
    /* will produce an array that would have been defined as
       $a = array(1 => 'one', 3 => 'three');
       and NOT
       $a = array(1 => 'one', 2 =>'three');
    */
    
    $b = array_values($a);
    // Now $b is array(0 => 'one', 1 =>'three')
    ?>
    

    【讨论】:

    • 我可以知道是否可以在删除第二个键后仍然希望总共拥有 3 个键?
    • unset 将删除密钥,这意味着您将少一个密钥。您可以使用 $array[3] = 'four' 之类的方式添加值
    【解决方案3】:

    你可以用Tom或者$csR得到数组和数组的区别然后重新索引:

    $array = array_values(array_diff($array, [$csR]));
    

    但是,很少需要有顺序键。你试过foreach而不是for吗?

    【讨论】:

      猜你喜欢
      • 2010-12-17
      • 2021-02-06
      • 2011-03-04
      • 1970-01-01
      • 2016-03-11
      • 1970-01-01
      • 2017-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多