Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> PHP

PHP หาตัวเลขที่หายไปใน Array

ตัวอย่างโค้ด

<?php
function missing_nums($my_arr, $arr_len, $val) {
    sort($my_arr);
    $i = 0;
    while ($i < $val && $my_arr[$i] <= 0) $i++;
    $count = 0;
    $current_num = 1;
    while ($count < $val && $i < $arr_len) {
        if ($my_arr[$i] != $current_num) {
            echo $current_num . " ";
            $count++;
        } else {
            $i++;
        }
        $current_num++;
    }
    while ($count < $val) {
        echo $current_num . " ";
        $current_num++;
        $count++;
    }
}

$my_arr = [6, 7, 9];
$arr_len = sizeof($my_arr);
$val = 5;
echo "The missing numbers in the array is ";
missing_nums($my_arr, $arr_len, $val);
?>

ผลลัพธ์

The missing numbers in the array is 1 2 3 4 5

ปัญหาในโค้ดต้นฉบับ

  • ตัวแปร $n และ $k ไม่ได้ Define (ควรเป็น $val)
  • sort($my_arr, $arr_len) - sort() ไม่รับ Parameter ที่ 2
  • $arr[$i] ควรเป็น $my_arr[$i]

โค้ดที่แก้ไขแล้ว

<?php
function missing_nums_fixed($my_arr, $count_needed) {
    $my_arr = array_filter($my_arr, fn($x) => $x > 0);
    $my_arr = array_unique($my_arr);
    sort($my_arr);
    
    $missing = [];
    $expected = 1;
    $i = 0;
    $len = count($my_arr);
    
    while (count($missing) < $count_needed && $i < $len) {
        if ($my_arr[$i] != $expected) {
            $missing[] = $expected++;
        } else {
            $i++;
            $expected++;
        }
    }
    
    while (count($missing) < $count_needed) {
        $missing[] = $expected++;
    }
    
    return $missing;
}

print_r(missing_nums_fixed([6, 7, 9], 5));  // [1, 2, 3, 4, 5]
?>

Alternative: ใช้ Array Functions

<?php
function find_missing_simple($arr, $n) {
    $present = array_flip(array_filter($arr, fn($x) => $x > 0));
    $missing = [];
    for ($i = 1; count($missing) < $n; $i++) {
        if (!isset($present[$i])) $missing[] = $i;
    }
    return $missing;
}
?>