【问题标题】:Removing nth element from an array and reindex it从数组中删除第 n 个元素并重新索引它
【发布时间】:2013-11-13 08:51:19
【问题描述】:

我有一个像下面这样的数组

Array
(
    [0] => '13-Nov'
    [1] => 'PUJA SUNUWAR'
    [2] => '13-Nov'
    [3] => '...301303'
    [4] => 'TT1331600004\DLG'
    [5] => '-10000.00'
    [6] => '0'
    [7] => '90000.00'
)

我需要删除数组的第 4 项并将其另存为

 Array
    (
        [0] => '13-Nov'
        [1] => 'PUJA SUNUWAR'
        [2] => '13-Nov'
        [3] => 'TT1331600004\DLG'
        [4] => '-10000.00'
        [5] => '0'
        [6] => '90000.00'
    )

我不想遍历数组的每个元素。有没有像array_pop 这样的一次性功能来删除数组的第n个元素?

【问题讨论】:

  • 这个unset($array[2]); 有什么问题?或者您可以创建一个函数,循环遍历数组并创建一个没有不必要值的新函数。
  • 自行取消设置不会重新索引数组。

标签: php arrays


【解决方案1】:

使用array_splice($array, 3, 1);

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

【讨论】:

    【解决方案2】:

    这是一个二维数组吗?如果是这样:

    不,没有内置函数可以执行此操作。您可以将“array_walk”与自定义回调一起使用,但我怀疑它会比简单的 foreach 更快。

    否则(如果是普通数组):

    unset( $aData[3] );
    
    $aData = array_values( $aData );
    

    Wich 比 array_splice 快。

    【讨论】:

      【解决方案3】:

      如上所述,没有内置函数。 如果你不需要关心数组索引,你应该使用unset,如果需要,你应该使用array_values

      您还应该在数组迭代时使用value reference,以防止在值修改时内部数组复制。如果不这样做,可能是性能下降的原因之一。

      foreach ($yourDataSet as &$value) {
          unset($value[2]); 
          //$value = array_values($value);
      }
      

      你不应该使用array_splice,因为perfomance reasons

      附言您也可以查看phpbench 以获得有关不同类型数组迭代的性能测试。

      【讨论】: