我有一个数组:

$array = array(1,2,3,4,5);

如果我要转储数组的内容,它们看起来像这样:

array(5) {
  [0] => int(1)
  [1] => int(2)
  [2] => int(3)
  [3] => int(4)
  [4] => int(5)
}

当我遍历并取消设置某些键时,索引会被抬高。

foreach($array as $i => $info)
{
  if($info == 1 || $info == 2)
  {
    unset($array[$i]);
  }
}

随后,如果我现在进行另一次转储,它将看起来像这样:

array(3) {
  [2] => int(3)
  [3] => int(4)
  [4] => int(5)
}

有一个正确的方法来重置数组,所以它的元素是基于零再次??

array(3) {
  [0] => int(3)
  [1] => int(4)
  [2] => int(5)
}

当前回答

在我的情况下,我需要保留数组值的唯一键,所以我只是使用了第二个数组:

$arr1 = array("alpha"=>"bravo","charlie"=>"delta","echo"=>"foxtrot");
unset($arr1);

$arr2 = array();
foreach($arr1 as $key=>$value) $arr2[$key] = $value;
$arr1 = $arr2
unset($arr2);

其他回答

在我的情况下,我需要保留数组值的唯一键,所以我只是使用了第二个数组:

$arr1 = array("alpha"=>"bravo","charlie"=>"delta","echo"=>"foxtrot");
unset($arr1);

$arr2 = array();
foreach($arr1 as $key=>$value) $arr2[$key] = $value;
$arr1 = $arr2
unset($arr2);

我使用$arr = array_merge($arr);改变数组的基数。简单明了。

使用array_splice而不是unset:

$array = array(1,2,3,4,5);
foreach($array as $i => $info)
{
  if($info == 1 || $info == 2)
  {
    array_splice($array, $i, 1);
  }
}

print_r($array);

这里是工作样本。

或者,您可以创建自己的函数,通过引用传递数组。

function array_unset($unsets, &$array) {
  foreach ($array as $key => $value) {
    foreach ($unsets as $unset) {
      if ($value == $unset) {
        unset($array[$key]);
        break;
      }
    }
  }
  $array = array_values($array);
}

所以你要做的就是…

$unsets = array(1,2);
array_unset($unsets, $array);

... 现在你的$数组没有你在$unsets中放置的值,键被重置

晚回答但是,在php5.3之后可以这样;

$array = array(1, 2, 3, 4, 5);
$array = array_values(array_filter($array, function($v) {
    return !($v == 1 || $v == 2);
}));
print_r($array);