2012-04-12 1 views
2

У меня есть массив со следующими строками. первый im, используя взрыв "\ n" и вывод, как показано ниже.Извлечение basename из имени файла в массиве

[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); 
+0

Это довольно неясно, на что вы просите для здесь ... – VictorKilo

+0

Просто взорваться снова /. Что вы пробовали и какие у вас проблемы? – Corbin

+0

Я сделал, строки в массиве будут разделены пробелом. im не уверен, как полоски строк, кроме последнего слова. извините, если вопрос неясен. – Stream

ответ

8

Вы ищете базовое имя():

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

круто, никогда не думал, что для этого можно использовать basename. – Michelle

+0

Да, +1 для basename, это понимает понятия путей к файлам и имена файлов. Pseudo: for ($ i = 1; $ i jwbensley

+0

это то, что они ищут. большое спасибо. – Stream

0
function lastPart($str) { 
    return end(explode('/', $str)); 
} 

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

Что это делает функция применяется lastPart к каждому элементу массива. array_map называется higher-order function, потому что он принимает другую функцию, как это аргумент, который является очень распространенными идиомами в том, что называется функционального программирования. PHP не работает, но мне все же нравятся такие решения.

array_filter и usort - две другие функции более высокого порядка, которые стоит проверить.

Для более общей императивного решения, которое вы можете просто запустить foreach цикл:

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

Это то, что вы ищете @Stream – Louis

+0

спасибо, array_map() для меня новичок. – Michelle

+0

Почему вы не приняли @Jack Spairow – Baba