ठीक है, मुझे यकीन नहीं है कि यह बुलेट-प्रूफ है, लेकिन मुझे लगता है कि यह काम करता है:
echo array_reduce($array, function($reducedValue, $arrayValue) {
if($reducedValue === NULL) return $arrayValue;
for($i = 0; $i < strlen($reducedValue); $i++) {
if(!isset($arrayValue[$i]) || $arrayValue[$i] !== $reducedValue[$i]) {
return substr($reducedValue, 0, $i);
}
}
return $reducedValue;
});
यह सरणी में संदर्भ स्ट्रिंग के रूप में पहला मान लेगा। फिर यह संदर्भ स्ट्रिंग पर पुनरावृति करेगा और उसी स्थिति में प्रत्येक स्ट्रिंग की तुलना दूसरे स्ट्रिंग के चार्ट से करेगा। यदि कोई चार मेल नहीं खाता है, तो संदर्भ स्ट्रिंग को चार की स्थिति में छोटा किया जाएगा और अगले स्ट्रिंग की तुलना की जाएगी। फ़ंक्शन तब सबसे छोटी मिलान स्ट्रिंग लौटाएगा।
प्रदर्शन दिए गए स्ट्रिंग्स पर निर्भर करता है। पहले वाला संदर्भ स्ट्रिंग छोटा हो जाता है, कोड जितनी जल्दी खत्म होगा। मैं वास्तव में कोई सूत्र नहीं है कि कैसे एक सूत्र में हालांकि डाल दिया।
मैंने पाया कि स्ट्रिंग्स को क्रमबद्ध करने के लिए आर्टेक्टेक्टो का दृष्टिकोण प्रदर्शन को बढ़ाता है। जोड़ा जा रहा है
asort($array);
$array = array(array_shift($array), array_pop($array));
इससे पहले कि array_reduceप्रदर्शन में काफी वृद्धि होगी।
यह भी ध्यान दें कि यह सबसे लंबे समय तक मिलान वाले प्रारंभिक विकल्प को लौटाएगा , जो अधिक बहुमुखी है लेकिन अभ्यस्त आपको आम रास्ता देगा । आपको दौड़ना होगा
substr($result, 0, strrpos($result, '/'));
परिणाम पर। और फिर आप मानों को निकालने के लिए परिणाम का उपयोग कर सकते हैं
print_r(array_map(function($v) use ($path){
return str_replace($path, '', $v);
}, $array));
जो देना चाहिए:
[0] => /lib/abcdedd
[1] => /conf/xyz/
[2] => /conf/abc/def
[3] => /htdocs/xyz
[4] => /lib2/abcdedd
प्रतिक्रिया का स्वागत करते हैं।