Neurodeamon
Erfahrenes Mitglied
Wen jetzt der Titel verwirrt hat, hier noch einmal eine ausführliche Erklärung. Kürzer und verständlicher kriege ich die Überschrift nicht hin
Ich arbeite an einer Klasse die ein array als input hat. In diesem Array befinden sich Verzeichnisspfade. Aus dem Array möchte ich nun alle Verzeichnisse entfernen die sich in übergeordneten Verzeichnissen befinden.
Beispiel:
Hier müsste also /verzeichnis1/subverzeichnis1/ entfernt werden, weil innerhalb von /verzeichnis1/, welches sich bereits im Array befindet.
Da man ab und zu den Wald vor lauter Bäumen nicht sieht, wenn man zu lange vor einem Problem sitzt würde ich mich über Ideen/Vorschläge, Korrekturen etc. freuen.
Es folgt der bereits vorhandene Code.
Momentan werden nämlich nicht alle einmalig vorkommenden Verzeichnisse ins Ausgabe-Array geschrieben.
Ich arbeite an einer Klasse die ein array als input hat. In diesem Array befinden sich Verzeichnisspfade. Aus dem Array möchte ich nun alle Verzeichnisse entfernen die sich in übergeordneten Verzeichnissen befinden.
Beispiel:
PHP:
<?php
$arr_verzeichnisse = array("/verzeichnis1/","/verzeichnis2/","/verzeichnis1/subverzeichnis1/");
?>
Da man ab und zu den Wald vor lauter Bäumen nicht sieht, wenn man zu lange vor einem Problem sitzt würde ich mich über Ideen/Vorschläge, Korrekturen etc. freuen.
Es folgt der bereits vorhandene Code.
Momentan werden nämlich nicht alle einmalig vorkommenden Verzeichnisse ins Ausgabe-Array geschrieben.
PHP:
<?php
class remove_subdir {
var $clean;
// remove subdirectories and its files of the same superior directory, as it is stupid to add them
function remove_subdir($stupid,$type){
if($type == "dirs"){
$stupid_tmp = $stupid;
// create all possible combinations
foreach($stupid as $dc){
foreach($stupid_tmp as $dc_tmp){
if ($dc != $dc_tmp){
$temp1 = strlen($dc);
$temp2 = strlen($dc_tmp);
if($temp1>$temp2){
/* cut the longer string down to size of shorter string
to avoid false positives */
$dc2 = substr($dc, 0, $temp2);
if($dc2 != $dc_tmp){
$this->clean[] = $dc_tmp;
}
}elseif($temp2>$temp1){
/* cut the longer string down to size of shorter string
to avoid false positives */
$dc_tmp2 = substr($dc_tmp, 0, $temp1);
if($dc_tmp2 != $dc){
$this->clean[] = $dc;
}
}
}
}
}
}elseif($type == "files"){
//
}
$this->clean = array_unique($this->clean);
return $this->clean;
}
}
$testarr = array("/6/","/1/2/","/1/3/","/4/6/","/6/7/","/8/","/9/","/1/");
$schwupps = new remove_subdir($testarr,"dirs");
print_r($schwupps->clean);
?>