ตัวอย่างโค้ด
<?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;
}
?>