ঠিক আছে, আমি নিশ্চিত নই যে এটি বুলেট-প্রুফ, তবে আমি মনে করি এটি কার্যকর হয়:
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
মতামত স্বাগত।