2012-02-27 6 views

답변

3

내가 사용하는 것이 sscanf

,

안된 예 :

list($node_id, $pdf_id) = sscanf($url, "node/%d/pdf/%d"); 

$node_id$pdf_id는 PDF ID를 포함하는 상기 노드 ID를 포함한다. 귀하의 의견에 따르면 : 예. echo $pdf_id;. 당신이 배열에 둘 필요하면

, 당신은 다음과 같이 그 일의 list() 방법을 제거 할 수 있습니다

$ids = sscanf($url, "node/%d/pdf/%d");합니다.

노드와 pdf ID가 모두 $ids 인 배열을 반환합니다. 그냥 PDF ID를 필요로하는 경우

마지막으로, 당신은

$id = sscanf($url, "node/95/pdf/%d");

을 할 수 있습니다.

나는 당신이 당신의 URL에서 양쪽 숫자를 필요로 할지도 모른다고 가정했기 때문에 나는 단지 양쪽을 가져 오는 방법을 보였다. 문자열을 구문 분석하는 형식에 따라 : 함수는 그가 필요로 정확히 않음을 사용할 수있을 때 내 솔루션을 게시 한 후 다른 모든 답변을보고

편집
, 나는 모든 사람들이 여러 기능이 해결되는 이유 궁금 . 이것은 또한 SQL 입출력이 적은 코드 IMHO로 연결됩니다. 그리고 URL이 확장되거나 쿼리 문자열이 추가되면 무언가가 깨지지 않습니다.

편집 2 list($node_id, $sub, $sub_id) = sscanf($url, "node/%d/%[^/]/%d"); 당신에게 "PDF"를 얻을 것이다 그것은 ID가 대신 "노드/% D/% S/% D"의 분리입니다. 이는 문자 /%s과 일치하기 때문입니다. %[^/]을 사용하면 슬래시를 제외한 모든 항목이 일치합니다.

+0

나는 코드를 얻지 못했다. pdf_id는 어떻게 얻을 수 있습니까?echo $ pdf_id? 미안해 내가이 일에 정말로 느리다면. 이 예에서 –

+0

인 경우 sscanf는 배열을 반환합니다. '% d '은 "숫자"를 의미합니다. 그래서 sscanf는 당신의 URL을 가져다가'node//pdf/'이라고 가정합니다. 배열로서 sscanf에 의해 돌려 주어지는 숫자 부분. list()를 사용하면 변수를 별도의 변수에 저장하므로 노드 ID가 필요할 수도 있으므로 편리 할 수 ​​있습니다. 더 많은 예제를 제공하기 위해 답변을 업데이트했습니다. – pduersteler

+0

는 코드를 시도했지만 빈칸을 반환합니다. var_dump ($ pdf_id) 나를 줘. T_T. 내가 잘못하고있는거야? –

3

이 작업을 수행 할 수 있습니다

$id = end(explode('/', 'node/95/pdf/1')); 

예 :

$arr = explode('/', 'node/95/pdf/1'); 
$id = end($arr); 
echo $id; // 1 
0

시도해보십시오 :

$input = 'node/95/pdf/1'; 
$parts = explode('/', $input); 
$output = (int) $parts[3]; 
2
$url = "node/95/pdf/1"; 
// Find the last occurence of a slash, get everything after that. 
$id = substr($url, strrpos($url, "/") + 1); 
+1

을 어떤 ID가 100 또는 1000에있는 경우? 같은 노드/95/pdf/1000 .. 당신의 코드는 여전히 작동합니까? –

+0

@ user1074776 : 여전히 작동 할 것입니다. –

+0

@ user1074776 : 제가 언급 한대로, 마지막 슬래시 뒤에 모든 것이 나타납니다. 그것의 길이는 부적합하다. –

0

당신은 경로의 마지막 구성 요소 잡아 basename() 기능을 사용할 수 있습니다 :

echo +basename("node/95/pdf/1/foo/8?foo=bar"); // int(8) 
+0

, 나는 이것이 가장 간단하거나 가장 빠른 것 같아요. 덕분에^_^ –

+1

좋은 해결책. 그러나 여기에는 나타날 수있는 쿼리 문자열도 포함됩니다. 그래서 예. 'node/95/pdf/1? foo = bar'와 같은 url을 사용하면'1? foo = bar'가 반환되어 기능을 손상시킬 수 있습니다. 또한'node/95/pdf/1/foo/8'과 같이 확장 된 url을 사용하면 올바른 id를 얻을 수 없습니다. 그럼, 좋은 해결책이지만, 그것을 확장 할 때 자신의 시스템을 망칠 수도 있다는 것을 알아 두십시오. – pduersteler

+1

@pduersteler : 샘플 입력을 기반으로 답변을 작성했습니다. '+'를 추가하면 쿼리 문자열을 없앨 수 있습니다. –

관련 문제