Ben tam yol dizeden doğrudan alt dizinin adını ayıklamak gerekir.
Örneğin, bunu söylüyor:
$str = "dir1/dir2/dir3/dir4/filename.ext";
$dir = "dir1/dir2";
Sonra dir $ için $ str izde alt dizinin ismi "Dir3" olacaktır. O $ dir ucunda '/' asla unutmayın.
Yani işlevi olmalıdır:
$subdir = getsubdir($str,$dir);
echo $subdir; // Outputs "dir3"
$ Dir = "dir1" sonra çıktı "dir2" olurdu. $ Dir = "dir1/dir2/dir3/dir4" sonra çıktı "" (boş) olurdu. $ Dir Eğer = "dir1" "sonra çıkış olacaktır". Vb.
Şu anda bu ben ne var, ve (bildiğim kadarıyla bunu test ettik gibi) çalışır. Ben string fonksiyonları bir sürü kullanıyorum bulmak beri basit bir yolu olup olmadığını merak ediyorum. Belki bir satırda bunun için bazı sihirli sıradanifade var? (Ne yazık ki regexp ile çok iyi değilim).
function getsubdir($str,$dir) {
// Remove the filename
$str = dirname($str);
// Remove the $dir
if(!empty($dir)){
$str = str_replace($dir,"",$str);
}
// Remove the leading '/' if there is one
$si = stripos($str,"/");
if($si == 0){
$str = substr($str,1);
}
// Remove everything after the subdir (if there is anything)
$lastpart = strchr($str,"/");
$str = str_replace($lastpart,"",$str);
return $str;
}
Gördüğünüz gibi, bu (giriş yok '/', boş girişi, vb) bazı garip davalarını için biraz hacky bulunuyor. Ben mantıklı hepsi umuyoruz. Herhangi bir yardım / öneri bekliyoruz.
Update (altered solution):
Peki Alix Axel o nokta üzerinde oldu. (: O) sadece dizinleri değil dosyaları (çıktılanmasını, bir dize döndürmek gerekir gibi) benim tam gereksinimleri ile uyumlu olduğunu, bu nedenle burada hafif tweaks ile yaptığı çözüm
function getsubdir($str,$dir) {
$str = dirname($str);
$temp = array_slice(array_diff(explode('/', $str), explode('/', $dir)), 0, 1);
return $temp[0];
}