2011-10-26 3 views
6

У меня есть массив как это:Найти пробелы в списке чисел

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. Как я могу программно найти эти пробелы и добавить новый массив на своем месте

Будет не более двух пробелов.

Я не могу придумать хороший способ сделать это, любые идеи? Благодарю.

+0

Не могли бы вы предоставить более подробную информацию? –

+0

Я добавил лучшее объяснение. – 472084

ответ

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); 
    } 
} 
+0

+1 для меньшей сложности пространства – Jordan

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); 

Шай

+0

Кажется, добавляет лишний xxx в конец массива? – 472084

+0

Проверьте обновленный код, добавив чек, чтобы убедиться, что это не последний элемент. –

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]; 
    } 
} 
+0

Это удаляет некоторые из исходных элементов массива. – 472084

+0

@Jleagle старый ответ сделал это; а не обновленный. –

+0

@ Хасан Хан: У вас есть две ошибки синтаксиса (отсутствует '$'). И я не понимаю, как 'count ($ result)' может быть больше 0 на данный момент. – netcoder

Смежные вопросы