1

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

$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',
);
4

3 回答 3

4

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

unset($foo[2]);
$foo = array_values($foo);
于 2013-09-24T10:02:55.763 回答
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
 )
于 2013-09-24T11:34:33.900 回答
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(),但仅在第二个中,如果您不需要保存原始数组。

编辑:更改了小错误,谢谢朴素的简

于 2013-09-24T11:36:12.507 回答