这是我的简单"算法:
如果该课程被命名为' AaaBbbCccDddEeeFff
'这样循环:
include/aaa/bbb/ccc/ddd/eee/fff.php
include/aaa/bbb/ccc/ddd/eee_fff.php
include/aaa/bbb/ccc/ddd_eee_fff.php
include/aaa/bbb/ccc_ddd_eee_fff.php
include/aaa/bbb_ccc_ddd_eee_fff.php
include/aaa_bbb_ccc_ddd_eee_fff.php
如果仍然没有找到,请尝试查看这些文件是否存在:
include/aaa/bbb/ccc/ddd/eee/fff/base.php
include/aaa/bbb/ccc/ddd/eee/base.php
include/aaa/bbb/ccc/ddd/base.php
include/aaa/bbb/ccc/base.php
include/aaa/bbb/base.php
include/aaa/base.php
include/base.php
如果仍未找到则错误。
我正在寻找一种快速简便的方法来转换它:
' AaaBbbCccDddEeeFff
'
到此:
include/aaa/bbb/ccc/ddd/eee/fff.php
然后轻松删除最新文件夹(我想我应该找explode()
)。
知道怎么做吗? (我不是要求整个代码,我不是懒惰的。)
答案 0 :(得分:0)
我认为正则表达式可行。像preg_match_all('[A-Z][a-z][a-z]'
, $string);
这样的东西可能会起作用 - 它会匹配一个大写字母,后跟一个小写字母和另一个小写字母。
答案 1 :(得分:0)
以下是算法的第一部分:
AaaBbbCccDddEeeFff - >
include / aaa / bbb / ccc / ddd / eee / fff.php
包括/ AAA / BBB / CCC / DDD / eee_fff.php
包括/ AAA / BBB / CCC / ddd_eee_fff.php
包括/ AAA / BBB / ccc_ddd_eee_fff.php
包括/ AAA / bbb_ccc_ddd_eee_fff.php
包括/ aaa_bbb_ccc_ddd_eee_fff.php
我认为你可以根据我的回答独立完成最后一部分。
<?php
function convertClassToPath($class) {
return strtolower(preg_replace('/([a-z])([A-Z])/', '$1' . DIRECTORY_SEPARATOR . '$2', $class)) . '.php';
}
function autoload($path) {
$base_dir = 'include' . DIRECTORY_SEPARATOR;
$real_path = $base_dir . $path;
var_dump('Checking: ' . $real_path);
if (file_exists($real_path) === true) {
var_dump('Status: Success');
include $real_path;
} else {
var_dump('Status: Fail');
$last_separator_pos = strrpos($path, DIRECTORY_SEPARATOR);
if ($last_separator_pos === false) {
return;
} else {
$path = substr_replace($path, '_', $last_separator_pos, 1);
autoload($path);
}
}
}
$class = 'AaaBbbCccDddEeeFff';
var_dump(autoload(convertClassToPath($class)));
答案 2 :(得分:0)
由于其他答案都是正则表达式,因此这是完整性的非正则表达方式:
function transform($str){
$arr = array();
$part = '';
for($i=0; $i<strlen($str); $i++){
$char = substr($str, $i, 1);
if(ctype_upper($char) && $i > 0){
$arr[] = $part;
$part = '';
}
$part .= $char;
}
$arr[] = $part;
return 'include/' . strtolower(implode('/', $arr)) . '.php';
}
echo transform('AaaBbbCccDddEeeFff');
// include/aaa/bbb/ccc/ddd/eee/fff.php
这会构建一个文件夹数组,因此您可以根据需要对其进行操作,例如通过取消设置所需的索引来删除文件夹,然后再进行内爆。
答案 3 :(得分:0)
由于您特别要求不要使用整个代码,因此这里有一些代码可以帮助您入门。这将获取输入并将其划分为由大小写更改描述的块。其余的你可以锻炼身体。
<?php
$input = "AaaBbbCccDddEeeFff";
$str_so_far = "";
$last_was_upper = 0;
$chunks = array();
while($next_letter = substr($input,0,1)) {
$is_upper = (strtoupper($next_letter)==$next_letter);
if($str_so_far && $is_upper && !$last_was_upper) {
$chunks[] = $str_so_far;
$str_so_far = "";
}
if($str_so_far && !$is_upper && $last_was_upper) {
$chunks[] = $str_so_far;
$str_so_far = "";
}
$str_so_far .= $next_letter;
$input = substr($input,1);
$last_was_upper = $is_upper;
}
var_dump($chunks);
?>