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とEmilVikströmのおかげで、私はソリューションを手に入れました。

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

2 に答える 2

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

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

lastPartこれが行うことは、配列のすべての要素に関数を適用することです。array_mapは、引数として別の関数を取るため、高階関数と呼ばれます。これは、関数型プログラミングと呼ばれるもので非常に一般的なイディオムです。PHP は機能しませんが、私はまだこのタイプのソリューションが好きです。

array_filterusortは、チェックする価値のある他の 2 つの高階関数です。

より一般的な命令型ソリューションの場合は、 foreachループを実行するだけです。

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