在数字列表中查找差距

时间:2011-10-26 11:15:28

标签: php arrays

我有一个这样的数组:

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

我想填补空白,看起来像这样:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => xxx
    [4] => 10
    [5] => 11
    [6] => 12
    [7] => 13
    [8] => 14
    [9] => xxx
    [10] => 23
    [11] => 24
    [12] => 25
)

如果你看第一个数组的值有1,2,3然后是一个差距然后是10,11,12,13,14然后是一个差距然后是23,24,25 ..怎么可以我以编程方式找到这些间隙并在其位置添加一个新的数组元素

最多会有两个空白。

我想不出一个好方法,做任何想法?感谢。

3 个答案:

答案 0 :(得分:2)

一个简单的for循环,不复制数组,只改变原始:

$repl = 'xxx';

for ($i=1; $i<count($array); $i++) {
    $valueR = $array[$i];
    $valueL = $array[$i-1] === $repl ? $array[$i-2] : $array[$i-1];
    if ($valueR > $valueL + 1) {
        array_splice($array, $i++, 0, $repl);
    }
}

答案 1 :(得分:1)

我会做这样的事情,没有经过测试但应该有效:)

$oldArray = array(1,2,3,10,11,12,13,24,25,26,27);

$newArray = array();
for($i=0;$i<count($oldArray);$i++){
    $newArray[] = $oldArray[$i];
    if($oldArray[$i+1] - $oldArray[$i] != 1 && $i+1 != count($oldArray))
        $newArray[] = "xxx"; // seperator
}

var_dump($newArray);

答案 2 :(得分:1)

$result = array();
if (count($oldArray) > 0)
{
    $result[] = $oldArray[0];
    for ($i=1; $i<count($oldArray); $i++)
    {
         if ($oldArray[$i]-$oldArray[$i-1] != 1)
             $result[] =  "xxx";
         $result[] = $oldArray[$i];
    }
}