2012-05-12 5 views
0

PHP로 분리하고자하는 문자열이 있습니다. 이 문자열은 데이터베이스의 ID 번호를 연결 한 것입니다.PHP로 문자열을 점진적으로 분할하기

문자열의 예는 다음과 같습니다 있지만로 구분 ID로 훨씬 길 수도 "_"

ID_1_10_11_12

나는 다음에 문자열을 분할하고 싶습니다 :

ID_1_10_11_12

ID_1_10_11

ID_1_10

ID_1

은 그런 공간 순서로 반전 한 후 분리 된 새로운 문자열을 연결할 :

새 문자열 = "ID_1 ID_1_10 ID_1_10_11 ID_1_10_11_12를"나는이 알아낼 질수

. 나는 "_"에 의해 배열에 원래 값을 폭발 시키려고 노력했지만, 그 숫자로 그냥 떠난다.

내가이 문제에 어떻게 접근해야하는지 조언 해 주시면 감사하겠습니다. 참조를 위해 이러한 ID는 부모 및 자식 값을 그룹화 한 다음 jquery 함수로 조작 할 수 있도록 확인란의 클래스 값에 기록됩니다.

+4

당신이 이것을하는 경우에 당신은 무언가를 진짜로 잘못하고 있습니다. 배열을 이해합니까? – Incognito

+0

OP가 새로운 형식의 암호화를 만들려고하는 것 같습니다. –

+0

재귀가 유용 할 수 있습니다. – Vulcan

답변

1
아마

없는 가장 우아한 방법, 미만 2 개 아이디가 있다면 그것을 깰 수있을, 그러나 이것은 당신이 요청 문자열을 반환합니다

$str = "ID_1_10_11_12"; 

//creates an array with all elements 
$arr = explode("_", $str); 

$new_str = ' ID_' . $arr[1]; 
for ($i=2; $i<count($arr); $i++) 
{ 
    $tmp = explode(" ", $new_str); 
    $new_str .= " " . $tmp[$i-1] . "_" . $arr[$i]; 
} 
$new_str = trim($new_str); 

echo $new_str; //echoes ID_1 ID_1_10 ID_1_10_11 ID_1_10_11_12 

을 내가 훨씬 유용성이 표시되지 않습니다 그러나 거기에 간다.

그러면 간단히 explode(" ", $new_str) 일 수 있으며 원하는 문자열을 가로지를 수있는 문자열의 모든 요소가 포함 된 배열을 가질 수 있습니다.

분명히

, 당신은 또한 미만 ID 배열 A는 입력하면 ID 이후 미만 2 개 배열 요소가 있는지 확인하고 trim($new_str)으로 공백없이 $new_str 인쇄 기능을 종료합니다 for 전에 if (count($arr) < 3)을 추가 할 수 있습니다 관심사.

편집 : 왼쪽 공백을 잘라 냈습니다.

+0

내가 필요한 것만 큼 고마워. – jdublu

0

내 로컬 테스트 서버가이를 확인하기 위해 다운되었지만 작동합니다.

<?php 
/* 

ID_1_10_11_12 
ID_1_10_11 
ID_1_10 
ID_1 

ID_1 ID_1_10 ID_1_10_11 ID_1_10_11_12 

*/ 
$str = "ID_1_10_11_12"; 
$delim = "_"; 
$spacer = " "; 
$ident = "ID"; 
$out = ""; 

// make an array of the IDs 
$idList = explode($delim, $str); 

// loop through the array 
for($cur = 0; $cur >= count($idList); $cur++){ 
    // reset the holder 
    $hold = $ident; 

    // loop the number of times as the position beyond 0 we're at 
    for($pos = -1; $pos > $cur; $pos++){ 

     // add the current id to the holder 
     $hold .= $delim . $idList[$cur]; // "ID_1" 
    } 

    // add a spacer and the holder to the output if we aren't at the beginning, 
    //  otherwise just add the holder 
    $out .= ($cur != 0 ? $spacer . $hold : $hold); // "ID_1 ID_1_10" 
} 
// output the result 
echo $out; 

?>