如何在PHP中的每个数组元素中应用替换?

时间:2013-11-21 10:45:53

标签: php arrays replace preg-replace str-replace

我的应用程序中有一个包含所有控制器列表的数组:

$controllerlist = glob("../controllers/*_controller.php");

如何使用一个PHP命令在每个数组元素的开头和../controllers/处删除_controller.php

8 个答案:

答案 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  ) );

http://codepad.org/VO6kyVOa

答案 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
      )