从关联数组中删除键
Posted
技术标签:
【中文标题】从关联数组中删除键【英文标题】: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 来“修复”键。 你放弃了吗??? 【参考方案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
吗?
【讨论】:
以上是关于从关联数组中删除键的主要内容,如果未能解决你的问题,请参考以下文章