2010-08-18 4 views
2

저는 PHP에 익숙하지 않아이 기능의 이름을 모르므로 매뉴얼에서 찾을 수 없었습니다.배열에서 문자열을 잘라내는 함수는 무엇입니까?

$files[] = 

[0] => 01_Nhemamusasa.mp3 
[1] => 02_Kari_Mudande.mp3 
[2] => 03_Chikende.mp3 
[3] => 04_Karinge_Zuva.mp3 
[4] => 05_Mbirimo.mp3 
[5] => 06_Muchenjedza_Mutonga.mp3 
[6] => 07_Skokianna.mp3 
[7] => 08_Mbavarira.mp3 

내가 내용을 절단하기 만하는 것은 _ 전과 부분을 제거하고 파일 유형을 제거 : 나는이 값으로 배열을 가지고있다. 배열 (Array) [1]과 [5] (이 예제에서)의 중간에있는 밑줄을 공백으로 변환하고 싶습니다. 즉,이 파일 이름을 노래의 실제 이름 배열로 변환해야합니다.

도움 주셔서 감사합니다.

편집 : 당신이 PHP 5.3을 사용하는 경우 http://us3.php.net/array_walk이 , 당신은 익명 함수를 array_walk 전달할 수 있습니다 내 호스트가 PHP 5.2.12 당신은 array_walk 기능을 사용하기를 원할 것입니다

답변

1
$input = array(
    '01_Nhemamusasa.mp3', 
    '02_Kari_Mudande.mp3', 
    '03_Chikende.mp3', 
    '04_Karinge_Zuva.mp3', 
    '05_Mbirimo.mp3', 
    '06_Muchenjedza_Mutonga.mp3', 
    '07_Skokianna.mp3', 
    '08_Mbavarira.mp3' 
); 

function convert($item) { 
    $item = explode('_', $item); 
    unset($item[0]); 
    $item = implode('_', $item); 
    $item = explode('.', $item); 
    $item = str_replace('_', ' ', $item[0]); 
    return $item; 
} 

$output = array_map('convert', $input); 

print_r($output); 

출력 :

Array 
(
    [0] => Nhemamusasa 
    [1] => Kari Mudande 
    [2] => Chikende 
    [3] => Karinge Zuva 
    [4] => Mbirimo 
    [5] => Muchenjedza Mutonga 
    [6] => Skokianna 
    [7] => Mbavarira 
) 
+0

이 필요하다는 점에 유의해야합니다. PHP5.3 + – Gordon

+0

이 필요하지만 호스트는 5.2.12를 실행하고 있습니다. ( – Joel

+1

@Gordon 인라인 함수가 이것을 만들었습니까 5.3+? @Joel 인라인 함수를 사용하지 않도록 코드를 다시 작성 했으므로 지금 사용 가능해야합니다. –

2

을 사용하고 있습니다.

편집 : array_map도 트릭을 수행합니다. 익명 함수에 대한 동일한 조언도 여기에 적용됩니다. array_map의 조합(), preg_replace이다()와 않는 str_replace()를 사용

+0

당신은 PHP <5.3 람다를 사용할 수 있습니다 'create_function'을 사용하여 – Gordon

+0

@Gordon : 이것은 확실히 사실이며 당신이 그것을 가져온 이후로, create_function에 관한주의 사항은 당신이 코드를 벗어날 가능성이 있다는 것입니다. 많은 개발자들은 이것을 추한 것으로 생각하고 일회용 클래스/메소드를 작성하고 배열 [array ('class', 'method')]을 통해 전달합니다. –

+0

예, 그것은 create_function과 함께 꽤 좋지 않으며 느립니다. – Gordon

3

:

$array = array(...); 

$array = array_map(function($item) { 
    return str_replace('_', ' ', preg_replace('#^\d+_(.*?)\.[a-z0-9]{2,6}$#i', '$1', $item)); 
}, $array); 

print_r($array); 
+0

PHP5.3 + – Gordon

0

당신은 배열을 반복 foreach를 사용하고 마지막 네 또는 다시, 처음 세 문자를 제거하는 substr을 사용할 수 있습니다 각 문자열.

그런 다음 str_replace을 사용하여 공백으로 밑줄을 변경할 수 있습니다.

0

모두 PHP는 문자열 교체 기능 (STR/preg_replace이다)는 "제목이"인수로 배열을 받아 들일 :

$files = preg_replace('~^\d+ (.+?)\..+$~', '$1', 
    str_replace('_', ' ', $files)); 
관련 문제