【问题标题】:Extract basename from filename in array从数组中的文件名中提取基名
【发布时间】:2012-04-25 05:59:54
【问题描述】:

我有以下字符串的数组。 首先我使用了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);

【问题讨论】:

  • 您在这里要求的内容还不清楚......
  • 在 / 上再次爆炸。您尝试过什么,遇到了什么问题?
  • 我做了,数组中的字符串将用空格分隔。我不确定如何去除除最后一个单词之外的字符串。抱歉,如果问题不清楚。

标签: php arrays extract explode


【解决方案1】:
function lastPart($str) {
  return end(explode('/', $str));
}

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

它的作用是将函数lastPart 应用于数组的每个元素。 array_map 被称为 higher-order function 因为它以 另一个函数 作为它的参数,这在所谓的函数式编程中是一个非常常见的习语>。 PHP 没有功能,但我仍然喜欢这种类型的解决方案。

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

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

$array2 = array();
foreach($array1 as $value) {
  $array2[] = end(explode('/', $value));
}

【讨论】:

  • 这就是你要找的@Stream
  • 我不是提出这个问题的人。
【解决方案2】:

你正在寻找 basename():

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

【讨论】:

  • 是的 +1 用于基本名称,这了解文件路径和文件名的概念。伪: for ($i=1;$i
猜你喜欢
  • 2013-09-21
  • 1970-01-01
  • 1970-01-01
  • 2018-10-27
  • 2013-03-03
  • 2011-11-16
  • 2021-08-31
  • 2015-03-19
相关资源
最近更新 更多