3

我有以下字符串的数组。首先我使用explode“\n”和如下输出。

[1]=> string(121) "/Microsoft/Windows/Ravemp2300Handler/DeviceArrival/a.exe" 
[2]=> string(139) "/Microsoft/Windows/EventHandlers/Ravemp2300Arrival/b.exe" 
[3]=> string(89) "/Microsoft/Windows/DeviceHandlers/Rio600Handler/c.exe" 
[4]=> string(103) "/Microsoft/Windows/Rio600Handler/EventHandlers/d.exe" 

以下数组将被提取 a.exe、b.exe 等,如下所示。

[1]=> string(121) "a.exe" 
[2]=> string(139) "b.exe" 
[3]=> string(89) "c.exe" 
[4]=> string(103) "d.exe" 

有人知道如何解决这个问题吗?对此,我真的非常感激。先感谢您。

我得到了解决方案,感谢 Leven 和 Emil Vikström 提供的替代解决方案。

$array2 = array_map('basename', $array1);
4

2 回答 2

10

您正在寻找 basename():

$array2 = array_map('basename', $array1);
于 2012-04-12T20:29:23.420 回答
1
function lastPart($str) {
  return end(explode('/', $str));
}

$array2 = array_map('lastPart', $array1);

它的作用是将函数应用于lastPart数组的每个元素。array_map被称为高阶函数,因为它接受另一个函数作为它的参数,这在所谓的函数式编程中是一个非常常见的习语。PHP 不起作用,但我仍然喜欢这种类型的解决方案。

array_filterusort是另外两个值得一试的高阶函数。

对于更常见的命令式解决方案,您可以只运行一个foreach循环:

$array2 = array();
foreach($array1 as $value) {
  $array2[] = end(explode('/', $value));
}
于 2012-04-12T20:25:09.407 回答