2011-10-26 36 views
6

Tôi có một mảng như thế này:Tìm những khoảng trống trong một danh sách các số

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

Và tôi muốn lấp đầy những khoảng trống để nó trông như thế này:

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 
) 

Nếu bạn nhìn vào các giá trị của mảng đầu tiên có 1,2,3 và sau đó một khoảng cách và sau đó 10,11,12,13,14 và sau đó một khoảng cách và sau đó 23,24,25 .. Làm thế nào tôi có thể lập trình tìm những khoảng trống và thêm một mới phần tử mảng ở vị trí của nó

Sẽ có tối đa hai khoảng trống.

Tôi không thể nghĩ ra cách tốt để làm điều này, bất kỳ ý tưởng nào? Cảm ơn.

+0

Bạn có thể giải thích rõ hơn không? –

+0

Tôi đã thêm giải thích tốt hơn. – 472084

Trả lời

2

Một for vòng lặp đơn giản, không cần sao chép mảng, nhưng chỉ thay đổi bản gốc:

$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 cho độ phức tạp ít hơn – Jordan

1

tôi sẽ làm một cái gì đó như thế này, không được thử nghiệm nhưng nên làm việc :)

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

Shai

+0

Điều này dường như thêm một xxx phụ vào cuối mảng? – 472084

+0

Kiểm tra mã đã cập nhật, đã thêm một dấu kiểm để đảm bảo đây không phải là mục cuối cùng. –

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

Việc này sẽ loại bỏ một số thành phần mảng ban đầu. – 472084

+0

@Jleagle câu trả lời cũ đã làm điều đó; không phải là cập nhật. –

+0

@ Khan Khan: Bạn có hai lỗi cú pháp trong đó (thiếu '$'). Và tôi không hiểu làm thế nào 'count ($ result)' có thể lớn hơn 0 tại thời điểm này. – netcoder

Các vấn đề liên quan