이 URL을 가지고있는 경우 : node/95/pdf/1
. 숫자/값 1을 어떻게 얻을 수 있습니까? parse_url을 시도했지만 나에게 잘못된 결과를주었습니다.이 URL을 구문 분석하는 방법은 무엇입니까?
추신 : 값 1은 단지 예일뿐입니다. id는 사용자가 클릭 한 내용에 따라 동적입니다.
이 URL을 가지고있는 경우 : node/95/pdf/1
. 숫자/값 1을 어떻게 얻을 수 있습니까? parse_url을 시도했지만 나에게 잘못된 결과를주었습니다.이 URL을 구문 분석하는 방법은 무엇입니까?
추신 : 값 1은 단지 예일뿐입니다. id는 사용자가 클릭 한 내용에 따라 동적입니다.
내가 사용하는 것이 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
과 일치하기 때문입니다. %[^/]
을 사용하면 슬래시를 제외한 모든 항목이 일치합니다.
이 작업을 수행 할 수 있습니다
이$id = end(explode('/', 'node/95/pdf/1'));
예 :
$arr = explode('/', 'node/95/pdf/1');
$id = end($arr);
echo $id; // 1
시도해보십시오 :
$input = 'node/95/pdf/1';
$parts = explode('/', $input);
$output = (int) $parts[3];
$url = "node/95/pdf/1";
// Find the last occurence of a slash, get everything after that.
$id = substr($url, strrpos($url, "/") + 1);
을 어떤 ID가 100 또는 1000에있는 경우? 같은 노드/95/pdf/1000 .. 당신의 코드는 여전히 작동합니까? –
@ user1074776 : 여전히 작동 할 것입니다. –
@ user1074776 : 제가 언급 한대로, 마지막 슬래시 뒤에 모든 것이 나타납니다. 그것의 길이는 부적합하다. –
당신은 경로의 마지막 구성 요소 잡아 basename()
기능을 사용할 수 있습니다 :
echo +basename("node/95/pdf/1/foo/8?foo=bar"); // int(8)
, 나는 이것이 가장 간단하거나 가장 빠른 것 같아요. 덕분에^_^ –
좋은 해결책. 그러나 여기에는 나타날 수있는 쿼리 문자열도 포함됩니다. 그래서 예. 'node/95/pdf/1? foo = bar'와 같은 url을 사용하면'1? foo = bar'가 반환되어 기능을 손상시킬 수 있습니다. 또한'node/95/pdf/1/foo/8'과 같이 확장 된 url을 사용하면 올바른 id를 얻을 수 없습니다. 그럼, 좋은 해결책이지만, 그것을 확장 할 때 자신의 시스템을 망칠 수도 있다는 것을 알아 두십시오. – pduersteler
@pduersteler : 샘플 입력을 기반으로 답변을 작성했습니다. '+'를 추가하면 쿼리 문자열을 없앨 수 있습니다. –
나는 코드를 얻지 못했다. pdf_id는 어떻게 얻을 수 있습니까?echo $ pdf_id? 미안해 내가이 일에 정말로 느리다면. 이 예에서 –
인 경우 sscanf는 배열을 반환합니다. '% d '은 "숫자"를 의미합니다. 그래서 sscanf는 당신의 URL을 가져다가'node//pdf/'이라고 가정합니다. 배열로서 sscanf에 의해 돌려 주어지는 숫자 부분. list()를 사용하면 변수를 별도의 변수에 저장하므로 노드 ID가 필요할 수도 있으므로 편리 할 수 있습니다. 더 많은 예제를 제공하기 위해 답변을 업데이트했습니다. –
pduersteler
는 코드를 시도했지만 빈칸을 반환합니다. var_dump ($ pdf_id) 나를 줘. T_T. 내가 잘못하고있는거야? –