PHP में array_diff() और range() फ़ंक्शन्स का उपयोग करके एक संख्यात्मक सरणी में लापता (missing) तत्वों को आसानी से ढूंढा जा सकता है।
उदाहरण
<?php
function absent($my_list) {
$my_array = range(min($my_list), max($my_list));
return array_diff($my_array, $my_list);
}
echo "Elements missing from first array are ";
print_r(absent(array(45, 48, 51, 52, 53, 56)));
echo "Elements missing from second array are ";
print_r(absent(array(99, 101, 104, 105)));
?>
आउटपुट
Elements missing from first array are Array ( [1] => 46 [2] => 47 [4] => 49 [5] => 50 [9] => 54 [10] => 55 ) Elements missing from second array are Array ( [1] => 100 [3] => 102 [4] => 103 )
एल्गोरिदम:
min($my_list)औरmax($my_list)से न्यूनतम और अधिकतम मान प्राप्त करें।range(min, max)पूर्ण क्रमिक सरणी बनाता है (जैसे 45 से 56 तक)।array_diff($full_range, $my_list)पूर्ण सरणी में वे मान लौटाता है जो मूल सरणी में नहीं हैं।
सीमाएँ और सुधार
- केवल संख्यात्मक सरणियों के लिए:
range()संख्याओं/अक्षरों के लिए काम करता है। - बड़े अंतराल के लिए मेमोरी: यदि min=1, max=1,000,000 तो
range()बड़ी सरणी बनाएगा। - कुंजियाँ संरक्षित:
array_diffमूल कुंजियाँ रखता है (इसलिए आउटपुट में [1], [2], [4]... दिखते हैं)। - कुंजियाँ रीसेट:
array_values()जोड़ें।
उन्नत संस्करण (बड़े अंतराल के लिए)
<?php
function findMissingEfficient($arr) {
$min = min($arr);
$max = max($arr);
$present = array_flip($arr); // O(1) लुकअप
$missing = [];
for ($i = $min; $i <= $max; $i++) {
if (!isset($present[$i])) $missing[] = $i;
}
return $missing;
}
?>
यह O(n) समय और O(n) स्पेस में काम करता है, range() की O(range) मेमोरी से बचाता है।
स्ट्रिंग/अक्षर सरणियों के लिए
<?php
$letters = ['a', 'c', 'e'];
$full = range('a', 'e'); // ['a','b','c','d','e']
$missing = array_diff($full, $letters); // ['b','d']
?>