首页 > 解决方案 > PHP检查数组键是否连续的平滑方法

问题描述

我需要检查一个数组的。如果它们是连续的,那很好,如果不是我需要填写一些数据。

例如

Array
(
    [0] => 0
    [1] => 1
    [2] => 8
    [3] => 0
    [4] => 0
    [5] => 0
    [6] => 0
    [7] => 0
    [8] => 0
    [10] => 0
    [11] => 0
    [12] => 0
    [14] => 0
    [15] => 0
)

在这种情况下,缺少索引913 。为了使示例更简单,我只想用数字999填充缺失的数据。

但是,我的解决方案有点草率并且无法正常工作:

$oldK = 0;
foreach($array as $k=>$entry)
{   
    if($oldK !== $k)
    {
        $array[$oldK] = 999;
    }

    $oldK ++;
}

产生以下输出:

Array
(
    [0] => 0
    [1] => 1
    [2] => 8
    [3] => 0
    [4] => 0
    [5] => 0
    [6] => 0
    [7] => 0
    [8] => 0
    [9] => 999
    [10] => 999
    [11] => 999
    [12] => 999
    [13] => 999
    [14] => 0
    [15] => 0
)

有没有一种顺畅的方法?

标签: phparrays

解决方案


您可以array_replace结合使用array_fill

$keys = array_keys($a);
$result = array_replace(array_fill(0, max($keys), 999), $a);

首先通过抓取键array_keys应该使其适用于任意数量的元素(显然,如果键是数字的)。

演示:https ://3v4l.org/Ik71a


推荐阅读