Я хотел бы использовать sscanf
Непроверено пример:
list($node_id, $pdf_id) = sscanf($url, "node/%d/pdf/%d");
$node_id
содержит идентификатор узла, $pdf_id
содержит идентификатор формата PDF. Согласно вашему комментарию: да, вы можете вывести его, например. echo $pdf_id;
.
Если вы нуждаетесь в них как в массиве, вы можете удалить метод list()
, делая это так:
$ids = sscanf($url, "node/%d/pdf/%d");
.
Это возвращает массив с идентификатором узла и pdf в $ids
.
Наконец, если вам просто нужен Ф идентификатор, вы могли бы сделать
$id = sscanf($url, "node/95/pdf/%d");
.
Я только что показал, как извлечь оба из-за того, что я предположил, что вам могут потребоваться оба номера из вашего URL-адреса.
Редактировать
видеть все другие ответы после отправки моего решения, я задаюсь вопрос, почему все решения этого с множеством функций, когда существует функция доступна, что делает именно то, что ему нужно: разбор строки в соответствии с форматом , Это также приводит к меньшему количеству кода, подвергнутого инъекции sql-инъекции IMHO. И это не нарушает что-либо, когда URL-адрес расширяется или строки запроса добавляются.
Edit 2 list($node_id, $sub, $sub_id) = sscanf($url, "node/%d/%[^/]/%d");
получит Вас "PDF", и это идентификатор отдельно вместо "узла /% d /% s /% D". Это связано с тем, что char /
также соответствует %s
. Использование %[^/]
соответствует всем, кроме косой черты.
Я не совсем понимаю ваш код. Как получить pdf_id?echo $ pdf_id? Извините, если я действительно замешкаюсь на этом. –
в этом примере sscanf возвращает массив. '% d' означает« цифры ». поэтому sscanf берет ваш url и предполагает наличие 'node//pdf/'. части цифр, возвращаемые sscanf в виде массива. использование list() сохраняет их в отдельных переменных, что может быть удобно и потому, что я думал, что вам также может понадобиться идентификатор узла. Я обновил ответ, чтобы предоставить больше примеров. –
pduersteler
попробовал ваш код, но он возвращает мне пробел. var_dump ($ pdf_id) дает мне null. T_T. я делаю это неправильно? –