如何删除数组元素,然后重新索引数组?

我有一些arrays的麻烦。 我有一个数组,我想修改如下。 我想通过索引删除它的元素(元素),然后重新索引数组。 可能吗?

$foo = array( 'whatever', // [0] 'foo', // [1] 'bar' // [2] ); $foo2 = array( 'foo', // [0], before [1] 'bar' // [1], before [2] ); 
 unset($foo[0]); // remove item at index 0 $foo2 = array_values($foo); // 'reindex' array 

你最好使用array_shift() 。 这将返回数组的第一个元素,将其从数组中删除,并重新索引数组。 所有在一个有效的方法。

 array_splice($array, array_search(array_value,$array),1); 

试试:

 $foo2 = array_slice($foo, 1); 
 Unset($array[0]); Sort($array); 

我不知道为什么这是被低估的,但如果有人试图尝试,你会注意到它的工作原理。 在数组上使用sorting重新分配数组的键。 唯一的缺点是它对价值进行分类。 由于密钥显然将被重新分配,即使对于array_values ,值也没有被sorting。

如果你使用array_merge ,这将重新索引键。 手册指出:

使用数字键input数组中的值将使用结果数组中从零开始的递增键进行重新编号。

http://php.net/manual/en/function.array-merge.php

这是我find原来的答案。

http://board.phpbuilder.com/showthread.php?10299961-Reset-index-on-array-after-unset();

除了xzyfer的回答

function

 function custom_unset(&$array=array(), $key=0) { if(isset($array[$key])){ // remove item at index unset($array[$key]); // 'reindex' array $array = array_values($array); //alternatively //$array = array_merge($array); } return $array; } 

使用

 $my_array=array( 0=>'test0', 1=>'test1', 2=>'test2' ); custom_unset($my_array, 1); 

结果

  array(2) { [0]=> string(5) "test0" [1]=> string(5) "test2" }