我的应用程序中有一个包含所有控制器列表的数组:
$controllerlist = glob("../controllers/*_controller.php");
如何使用一个PHP命令在每个数组元素的开头和../controllers/
处删除_controller.php
?
答案 0 :(得分:2)
由于preg_replace可以对数组起作用,你可以这样做:
$array = array(
"../controllers/test_controller.php",
"../controllers/hello_controller.php",
"../controllers/user_controller.php"
);
$array = preg_replace('~../controllers/(.+?)_controller.php~', "$1", $array);
print_r($array);
<强>输出:强>
Array
(
[0] => test
[1] => hello
[2] => user
)
答案 1 :(得分:1)
在这种情况下不需要正则表达式,除非你提到的内容有所不同。
$array = array(
"../controllers/test_controller.php",
"../controllers/hello_controller.php",
"../controllers/user_controller.php"
);
// Actual one liner..
$list = str_replace(array('../controllers/', '_controller.php'), "", $array);
var_dump($array);
这将输出
array (size=3)
0 => string 'test' (length=4)
1 => string 'hello' (length=5)
2 => string 'user' (length=4)
(我认为)你要求的是什么。
答案 2 :(得分:1)
将一个数组映射到另一个数组:
$files = array(
'../controllers/test_controller.php',
'../controllers/hello_controller.php'
);
$start = strlen('../controllers/');
$end = strlen('_controller.php') * -1;
$controllers = array_map(
function($value) use ($start, $end) {
return substr($value, $start, $end);
},
$files
);
var_dump($controllers);
答案 3 :(得分:1)
我不确定你是如何定义“命令”的,但我怀疑有一种方法可以通过一个简单的函数调用来实现。
但是,如果你只是想让它变得紧凑,这是一个简单的方法:
$controllerlist = explode('|||', str_replace(array('../controllers/', '_controller.php'), '', implode('|||', glob("../controllers/*_controller.php"))));
它有点脏,但它可以在一行中完成工作。
答案 4 :(得分:1)
没有搜索和替换的一个命令?是的,你可以!
如果我没有遗漏某些东西,那么保持简单并使用substr函数从开头到结尾砍掉15个字符:
substr($ x,15,-15)
因为glob总是会给你带有该模式的字符串。
示例:
// test array (thanks FruityP)
$array = array(
"../controllers/test_controller.php",
"../controllers/hello_controller.php",
"../controllers/user_controller.php" );
foreach($array as $x){
$y=substr($x,15,-15); // Chop 15 characters from the start and end
print("$y\n");
}
输出:
test
hello
user
答案 5 :(得分:0)
如果您有这样的数组:
$array = array( "../controllers/*_controller.php",
"../controllers/*_controller.php");
然后array_map()帮助您修剪不必要的字符串。
function trimmer( $string ){
return str_replace( "../controllers/", "", $string );
}
$array = array( "../controllers/*_controller.php",
"../controllers/*_controller.php");
print_r( array_map( "trimmer", $array ) );
答案 6 :(得分:0)
preg_replace也接受一个数组作为参数:
$before = '../controllers/';
$after = "_controller.php";
$preg_str = preg_quote($before,"/").'(.*)'.preg_quote($after,"/");
$controllerlist = preg_replace('/^'.$preg_str.'$/', '\1', glob("$before*$after"));
答案 7 :(得分:0)
在一个命令中在每个arrayelement的开头和15结尾处去掉15个字符:
$controllerlist = substr_replace(
substr_replace(
glob("../controllers/*_controller.php"),'',-15
),'',0,15
)