2013-03-06 1 views
0

나는 길이가 알려지지 않은 문자와 문자열을 가지고 있습니다.charcters의 x 금액 후 문자열 자르기

x 자 다음에 문자열을자를 수 있기를 원합니다. 에서 예를 들어

:

$string = "Hello# m#y name # is Ala#n Colem#n" 
$character = "#" 
$x = 4 

나는 돌아 싶습니다

"Hello# m#y name # is Ala#" 

희망을 내가 여기 일을 복잡 이상 아니에요!

많은 감사

+0

는 "#"의 4 번째 발생까지의 문제의 예에서, 모든 것을 의미합니까? – AD7six

+0

맞습니다. 루프를 거치지 않아도된다는 PHP 함수가 있어야한다고 생각합니다. – Boomfelled

+0

'strtok'과 새로운 문자열을 만드는 루프가 가장 효율적으로 보인다. 물론'$ arr = explode ($ character, $ string, $ x + 1); $ newstring = implode ('#', array_slice ($ arr, 0,4))'경로를 사용할 수 있습니다. – Wrikken

답변

4
function posncut($input, $delim, $x) { 
    $p = 0; 
    for($i = 0; $i < $x; ++ $i) { 
     $p = strpos($input, $delim, $p); 
     if($p === false) { 
      return ""; 
     } 
     ++ $p; 
    } 
    return substr($input, 0, $p); 
} 
echo posncut($string, $character, $x); 

그것은 차례로 각 구분 (strpos)을 발견하고 당신이 찾고있는 한 후 정지합니다. 텍스트가 부족한 경우 (strposfalse을 반환) 빈 문자열을 제공합니다.

업데이트 :이 방법을 폭발과 비교하는 벤치 마크가 있습니다 : http://codepad.org/rxTt79PC. explode (array_slice 대신 array_pop과 함께 사용하는 경우)이 빠릅니다.

+0

"내"가 아님 - 벤치 마크 +1을 제공해 주셔서 감사합니다 (답안에서 참조해야 함). 외모로 코드를 판단하기가 어려우며 종종 실수로 =) – AD7six

+0

을 추가하고 위의 주석 스레드를 정리했습니다. 내 자신에게 말한 것처럼 보였기 때문에 : P – Dave

4

#에있는 문자열을 explode- 제안하고 해당 배열의 첫 번째 4 개 요소를 가져 오는 것이 좋습니다. 이 라인을 따라

$string = "Hello# m#y name # is Ala#n Colem#n"; 
$character = "#"; 
$x = 4; 

$split = explode($character, $string); 
$split = array_slice($split, 0, $x); 

$newString = implode($character, $split).'#'; 
1

뭔가 :

$str_length = strlen($string) 
$character = "#" 
$target_count = 4 

$count = 0; 
for ($i = 0 ; $i<$str_length ; $i++){ 
    if ($string[$i] == $character) { 
     $count++ 
     if($count == $target_count) break; 
    } 

} 

$result = sub_str($string,0,$i)