Как вернуть частичную строку PHP после совпадения строки? - PullRequest
1 голос
/ 22 марта 2011

Я хочу вернуть идентификатор страницы из строки URL.

Например, если у меня есть это:

    <?php
    $string = "foobar.com/?page_id=20"; // <-dynamically generated

    $new_string = some_function($string, get stuff after 'page_id='); // (need to know what function to use and how)

    // I want to get this:
    echo $new_string; //($new_string = "20";)
?>

/// ОБНОВЛЕНИЕ!

ЯПопытка добавить класс в ссылку, если я в настоящее время на этой странице или один из его детей.Вот что я получил:

<?php
$items = wp_get_nav_menu_items("navigation");
$counter = 1;
foreach($items as $item): ?>
<a id="mainnav<?php echo $counter; ?>" class="
<?php
//home
$theurl = $item->url;
$new_string = modify_withfunction("after page_id=", $theurl);

if ($new_string == $page->post_parent || $new_string == $page->ID) {
echo 'currentnav';
}
?>
" href="<?php echo $item->url; ?>"><?php echo $item->title; ?></a>
<?php 
$counter++;
endforeach;
?>

Ответы [ 4 ]

1 голос
/ 22 марта 2011

Если вы не хотите использовать регулярные выражения.

Вы можете посмотреть на:

Вот пример кода:

<?php
parse_str(parse_url('foobar.com/?page_id=20', PHP_URL_QUERY));
var_dump($page_id);
1 голос
/ 22 марта 2011

У вас есть два варианта. Извлечение чего-либо из строки обычно является задачей регулярных выражений. Они просты, когда вы понимаете, что вы можете просто отметить фиксированную часть строки и один из заполнителей для того, что вы хотите (\d+ для d эксилайты здесь):

preg_match('/page_id=(\d+)/', $str, $match);
print $match[1];

Или, если это строка URL, то это также возможно:

parse_str(substr(strrchr($str, "?"), 1), $params);
print $params["page_id"];
1 голос
/ 22 марта 2011

Не проверено, но этот код должен делать:

function get_pageid($str){
    preg_match("/page_id=(\d+)?/", $str, $matches);
    return $matches[0];
}

Но это будет работать только с тем идентификатором, который вы хотите получить, это серия цифр. Вам нужно изменить регулярное выражение, чтобы оно соответствовало формату, если он отличается.

0 голосов
/ 22 марта 2011

, так как вы добавили тег wordpress к вашему вопросу.

wordpress предлагает $wp_query объект, и этот объект имеет свойство с именем query_vars

if(isset($wp_query->query_vars['page_id'])) {
    $page_id = urldecode($wp_query->query_vars['page_id']);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...