从文件名数组中提取基本名称

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

这里你所问的并不十分明确... - VictorKilo
请在“/”上再次执行explode函数。您尝试了什么?遇到了什么问题? - Corbin
我做了,数组中的字符串将用空格分隔。我不确定如何除了最后一个单词之外去掉字符串。如果问题不清楚,请原谅。 - Stream
2个回答

10

你需要使用basename()函数:

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

是的,basename 得到了赞同,它理解文件路径和文件名的概念。伪代码:for ($i=1;$i<length($array1);$i++) { $array2[$i] = basename($array1{$i]); } - jwbensley

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));
}

这就是你要找的 @Stream。 - lsl
我不是提问者。 - Jürgen Paul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接