以下の2つの機能があります
function ListFiles($dir) {
if($dh = opendir($dir)) {
$files = array();
$topics = array();
$inner_files = array();
while($file = readdir($dh)) {
if($file != "." && $file != ".." && $file[0] != '.') {
array_push($topics, $file);
if(is_dir($dir . "/" . $file)) {
$inner_files = ListFiles($dir . "/" . $file);
if(is_array($inner_files)) $files = array_merge($files, $inner_files);
} else {
array_push($files, $dir . "/" . $file);
}
}
}
closedir($dh);
$topics = array();
$i = 0;
foreach ($files as $file) {
//wrong result
$topics[] = getTopicFromPath($file);
//correct result
//$topics[] = getTopicFromPath("/Users/Unknown/Sites/sample/training/topic/acq/19ddb673359747ee9095.txt")
}
return $topics;
}
}
function getTopicFromPath($path){
//$path = /Users/Unknown/Sites/sample/training/topic/acq/19ddb673359747ee9095.txt
$string1 = substr($path,strpos($path,"topic/"));
//$string1 = topic/acq/19ddb673359747ee9095.txt
$string2 = str_replace("topic/", "", $string1);
//$string2 = acq/19ddb673359747ee9095.txt
$string3 = strstr($string2, '/', true);
//$string3 = null
//expecting $string3 = 'acq'
return $string3;;
}
問題は、 getTopicFromPath($path) が readdir() メソッドからの文字列を解析できないことです。しかし、純粋な文字列を入れると、結果は正しいです。コードが明確であることを確認してください。
私がやりたいことは、ファイルパスを取得し、その親フォルダーをトピックとして保存することです。
別の方法でファイルを取得すると、問題が解決する場合があります。しかし、これらの機能の何が問題なのか知りたいです。