删除元素并重新索引

时间:2013-09-24 10:00:42

标签: php arrays

逻辑是在所有元素被移除后的特定间隔之后从元素中获取最后一个元素。假设有五个用户并且每个用户都被淘汰了,那么我必须找到最后剩下的用户。

$foo = array(
    '0'=>'1',
    '1'=>'2',
    '2'=>'3',
    '3'=>'4',
    '4'=>'5',
    '5'=>'6'
);

现在删除索引为2的元素,并以下面的格式重新索引数组。

$foo = array(
    '0'=>'4',
    '1'=>'5',
    '2'=>'6',
    '3'=>'1',
    '4'=>'2',
);

3 个答案:

答案 0 :(得分:4)

您可以使用unset(),但您还需要调用array_values()来强制重新编制索引。例如:

unset($foo[2]);
$foo = array_values($foo);

答案 1 :(得分:1)

尝试下面给出输出

    $foo = array('0'=>'1','1'=>'2','2'=>'3','3'=>'4','4'=>'5','5'=>'6');
    //need to input this as the index of the element to be removed
    $remove_index = "2";
    unset($foo[$remove_index]);
    $slice1 = array_slice($foo, 0, $remove_index);
    $slice2 = array_slice($foo, $remove_index);
    $final_output = array_merge($slice2, $slice1);

输出

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

答案 2 :(得分:1)

最初的问题有点不清楚。我知道您要删除索引X,并将索引X后面的所有项目作为数组中的第一项。

$index2remove = 2;
$newArray1 = array_slice($foo, $index2remove+1); // Get items after the selected index
$newArray2 = array_slice($foo, 0, $index2remove); // get everything before the selected index

$newArray = array_merge($newArray1, $newArray2); // and combine them

或更短且耗费更少的内存(但更难阅读):

$index2remove = 2;
$newArray = array_merge(
                array_slice($foo, $index2remove+1),  // add last items first
                array_slice($foo, 0, $index2remove) // add first items last
             );

您不需要在我的代码中取消设置值2,只需将其切片即可。我们用第二个拼接函数中的-1来做到这一点。

如果需要,可以用$newArray = array_merge()替换$foo = array_merge(),但如果不需要保存原始数组,则仅用第二个替换。

修改:更改了小错误,谢谢plain jane