PHP:使用unset()删除数组元素后重新排序数组

47

这里涉及到两个函数。

  1. 搜索数组中是否存在给定字符串
  2. 如果未找到该字符串,则使用unset()函数取消设置数组项

$array = array("first", "second", "third", "fourth");

foreach($array as $i=> $string) {  
 if(stristr($string, "e")) {  
    unset($array[$i]);
 }   

}

second 是包含字符 'e' 的数组项。如果它被 unset$array[1] 将变为空:

$array[0] = "first"  
$array[1] = ""  
$array[2] = "third"  
$array[3] = "fourth"

我希望将数组中的$array[1]移除(就像array_shift()一样),这样third就会取代second的位置,fourth就会取代third的位置:

$array[0] = "first"    
$array[1] = "third"  
$array[2] = "fourth"

你还应该将array_filter与array_values结合使用。 - Bot
2个回答

118
$array = array_values($array);

1
+1,这是最简单的方法,但如果您想要自动完成,则可以使用SPLDoublyLinkedList - Wrikken
非常好,完美。 - Kumar Sambhav Pandey
您是大王,在使用json_decode解码后,再使用unset删除元素,最后使用json_encode编码时,由于缺少已删除的元素,导致我的JSON树破裂了。现在问题已经解决了,谢谢。 - matasoy
如果存在类似 $array['name'] 的关联键,它们将被转换为顺序索引键,因此当数组具有两种类型的索引时,这个解决方案就不可行了。 - NaN

4
我认为我找到的最好解决方案是:

解决方案1

如果你只想删除一个元素:

  array_splice($array,1,1); // all keys will be reindexed from 0

第二个和第三个参数分别表示偏移量(键)和要删除的长度(多少个元素)。

解决方案2

最好的方法是删除多个键:使用array_filter()从数组中删除所有空字符串和falsey值,然后使用array_splice()重新排序:

array_splice(array_filter($array), 0, 0);

不错的答案...针对多维和会话。 - deemi-D-nadeem

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接