2015-11-21 4 views
-1

Мне нужно установить regex как массив для маршрутов на моей странице, чтобы принять год. Что я имею в виду:PHP - regex as array key

$segment = URL::segment(0); //get first segment for example login, or 2015 - as year 

$routes = [ 
"/" => "home.php", 
"login" => "login.php", 
"some_regex_here" => "year_posts.php" 
] 

//now check if $segment exists in array $routes 
if(isset($routes[$segment]) 
    URL::redirect($routes[$segment]); 
else 
    URL::show404();//page in $segment isn't available in $routes array 

Теперь, когда я иду в localhost/2015, $segment будет 2015, поэтому он соответствует регулярному выражению условия в ключе, и он должен перенаправить меня year_posts.php. У вас есть идеи, как это сделать?

+0

Извините, это не имеет никакого смысла. По крайней мере, никто не смог объяснить. Массив не выполняет перенаправления, не может «перейти» к нему. Так почему бы вам не рассказать, что такое ваш вопрос _real_? Если ваш вопрос просто «то, что регулярное выражение соответствует строке« localhost/2015 », то я предлагаю вам прочитать базовое введение в регулярные выражения. Это ваш вопрос - это что-то другое, тогда скажите так. – arkascha

+0

Нет, ты меня не понимаешь. Я получаю URL '$ segment' как' 2015'. Теперь я смотрю массив '$ routes', где мне приходится перенаправлять пользователя в соответствии с сегментом как массив ключей. Если сегмент соответствует регулярному выражению (допустимый год), 'redirect ($ routes [$ segment])', тогда как ключ 2015 не существует в массиве, но он соответствует регулярному выражению. Я надеюсь, что вы уже знаете, что я имею в виду. –

+0

Если да, то почему бы вам не рассказать об этом в своем вопросе? И если да, то какой именно ваш вопрос? Помимо регулярного выражения для «2015»? Повторяю: начните читать введение в регулярные выражения. – arkascha

ответ

0

Давайте начнем с регулярным выражением:

Быстрых и Дыра: Это будет проверить, если строка находится всего четыре (числовые) цифры:

'/^\d\d\d\d$/' 

также может быть записан в виде:

'/^\d{4}$/' 

Если вы хотите проверить диапазон в течение определенного года, он становится более сложным. Например. использовать это в 2010 году до 2015 года:

'/^201[0-5]$/' 

Теперь для PHP: Вы не можете использовать регулярное выражение в качестве ключа массива. Вам, вероятно, понадобится еще if, например:

if(preg_match('/^201[0-5]$/', $segment)) 
{ 
    URL::redirect("year_posts.php"); 
} 
elseif(isset($routes[$segment]) 
{ 
    URL::redirect($routes[$segment]); 
} 
else 
{ 
    URL::show404();//page in $segment isn't available in $routes array 
}