2017-12-31 161 views
0

내가 PHP에서 문자열을 추출하고 쉼표로 변환하려고 구분 된 문자열 여기 동적 폭발

내가 함께 일하고 일부 샘플 문자열이며, 결과는 내가 필요

입력 :

G1_C2_S3_T5 or G4_C5_S4_T7_I6_H3 

결과이어야

G1,G1_C2,G1_C2_S3,G1_C2_S3_T5 

    or 

    G4,G4_C5,G4_C5_S4,G4_C5_S4_T7,G4_C5_S4_T7_I6,G4_C5_S4_T7_I6_H3 

입력 길이 C는 동적 일 수있다

$arr = explode("_", $string, 2); 
    $first = $arr[0]; 

이 어떻게 PHP에서 그렇게 할 수 있습니다 OMMA 분리

이 맞습니까?

+2

무엇을 이미 시도 했습니까? 이 작업을 해결하기 위해 직접 시도하십시오. 스택 오버플로는 "나를위한 코드 작성"과 같은 질문이 아닙니다. – Flying

답변

1

이런 식으로 뭔가가 작동해야 $string 당신이

//explode by underscore 
$parts = explode('_', $string); 

$c = []; 
//do until nothing else to pop from array 
while (!empty($parts)) { 
    $c[] = implode('_', $parts); 
    //will pop element from end of array 
    array_pop($parts); 
} 
//reverse 
$c = array_reverse($c); 
//glue it with comma 
echo implode(',', $c); 
1

초기 문자열에서 밑줄로 구분 된 값의 수는 다음과 같습니다. G4_C5_S4_T7_I6_H3 (6)은 원하는 문자열에있는 쉼표로 구분 된 값의 수와 같습니다. G4,G4_C5,G4_C5_S4,G4_C5_S4_T7,G4_C5_S4_T7_I6,G4_C5_S4_T7_I6_H3 (6). 따라서 우리는 첫 번째 루프 $end = count($parts)에서이 번호를 사용합니다.

$str = "G4_C5_S4_T7_I6_H3"; 
$newstr = ''; 

$parts = explode('_', $str); 
$comma = ''; 

for ($i = 0, $end = count($parts); $i < $end; $i++) { 
    $newstr .= $comma; 

    $underscore = ''; 
    // build underscore-separated value 
    // index i is used to indicate up which value to stop at for each iteration 
    for ($j = 0; $j <= $i; $j++) { 
     $newstr .= $underscore . $parts[$j]; 
     // set underscore after the first iteration of the loop 
     $underscore = '_'; 
    } 
    // set comma after the first iteration of the loop 
    $comma = ','; 
} 

echo $newstr; // G4,G4_C5,G4_C5_S4,G4_C5_S4_T7,G4_C5_S4_T7_I6,G4_C5_S4_T7_I6_H3 
1

폭발로 작업하는 문자열입니다 쉽습니다 :

$parts = explode('_', $string); 

지금 당신이 [ 'G1', 'C2', 'S3', 'T5' ] 같은 $parts 배열을 얻는다.

print implode(', ', $parts); 

수율 :

$prev = [ ]; 
array_walk(
    $parts, 
    function(&$value) use (&$prev) { 
     $prev[] = $value; 
     $value = implode('_', $prev); 
    } 
); 

지금 $parts이 요소를 보유 : 각 항목이 전에 해당 항목과 다른 모든 항목의 연결이되도록

당신은 배열이를 변환 할

G1, G1_C2, G1_C2_S3, G1_C2_S3_T5