首页 > 解决方案 > 从php中的数组中删除每个第3个和第4个元素

问题描述

我有以下数组,我想跳过数组中的前 3 个元素(键 - 0、1、2)并删除下一个 2 元素(键 - 3、4)。即 - 我想要这样的数组,它会跳过每个第一个 3 个元素并在前 3 个元素之后删除下一个 2 个元素。我尝试了下面的代码,但这不是正确的解决方案。

for($i = 0; $i < count($newArray); $i += 1) {
    if($i == 3 || $i == 4 || $i == 8 || $i == 9){
        unset($newArray[$i]);
    }
}

输入数组

Array
    (
        [0] => 0.393
        [1] => 0.769
        [2] => 0.189
        [3] => 0
        [4] => 0
        [5] => 0.349
        [6] => 0.686
        [7] => 0.168
        [8] => 0
        [9] => 0
        [10] => 0.272
        [11] => 0.534
        [12] => 0.131
        [13] => 1
        [14] => 0
    )

**Expected Output**

    Array
            (
                [0] => 0.393
                [1] => 0.769
                [2] => 0.189
                [3] => 0.349
                [4] => 0.686
                [5] => 0.168
                [6] => 0.272
                [7] => 0.534
                [8] => 0.131
            )

标签: phparrays

解决方案


您可以使用array_filter, 使用ARRAY_FILTER_USE_KEY标志将元素键传递给过滤器函数,并删除所有key % 5不是的条目< 3

$newArray = array_filter($newArray, function ($k) { return $k % 5 < 3; }, ARRAY_FILTER_USE_KEY );
print_r($newArray);

输出:

Array
(
    [0] => 0.393
    [1] => 0.769
    [2] => 0.189
    [5] => 0.349
    [6] => 0.686
    [7] => 0.168
    [10] => 0.272
    [11] => 0.534
    [12] => 0.131
)

请注意,如果您希望数组值以 0 为索引,则可以通过以下方式传递结果array_values

$newArray = array_values($newArray);
print_r($newArray);

输出:

Array
(
    [0] => 0.393
    [1] => 0.769
    [2] => 0.189
    [3] => 0.349
    [4] => 0.686
    [5] => 0.168
    [6] => 0.272
    [7] => 0.534
    [8] => 0.131
)

3v4l.org 上的演示


推荐阅读