#php #arrays #laravel #indexing #preg-match
Вопрос:
<?php
namespace AppHttpControllers;
use AppHttpControllersController;
class SiteController extends Controller{
public $posts = [
1 => [
'title' => 'Тайтл страницы 1',
'author' => 'Автор страницы 1',
'dated' => 'Дата публикации страницы 1',
'teaser' => 'Короткое описание страницы 1',
'text' => 'Полный текст страницы 1',
],
2 => [
'title' => 'Тайтл страницы 2',
'author' => 'Автор страницы 2',
'dated' => 'Дата публикации страницы 2',
'teaser' => 'Короткое описание страницы 2',
'text' => 'Полный текст страницы 2',
],
3 => [
'title' => 'Тайтл страницы 3',
'author' => 'Автор страницы 3',
'dated' => 'Дата публикации страницы 3',
'teaser' => 'Короткое описание страницы 3',
'text' => 'Полный текст страницы 3',
],
4 => [
'title' => 'Тайтл страницы 4',
'author' => 'Автор страницы 4',
'dated' => 'Дата публикации страницы 4',
'teaser' => 'Короткое описание страницы 4',
'text' => 'Полный текст страницы 4',
],
5 => [
'title' => 'Тайтл страницы 5',
'author' => 'Автор страницы 5',
'dated' => 'Дата публикации страницы 5',
'teaser' => 'Короткое описание страницы 5',
'text' => 'Полный текст страницы 5',
]
];
public function showOne($id){
$length = count($this->posts);
if(preg_match("#[1-$length]#", $id))
return view('page', ['arr' => [$this->posts[$id]], 'l' => $length]);
else
return view('404');
}
}
У меня есть 5 сообщений, которые я хочу получить, передав параметр get в URL. Я проверяю, находится ли значение в диапазоне массива сообщений. Однако preg_replace по какой-то причине не работает, я проверил значение $length через var_dump, и это дает мне точное значение, которое мне нужно, а именно 5. Например, если я передам 20 в качестве параметра $id в url, preg_replace все равно вернет значение true и выдаст мне ошибку смещения.
Комментарии:
1. Разве это не
array_key_exists()
было бы намного лучше для этого?2. Спасибо. Я привык помещать все в регулярные выражения, так как они могут все проверять. Хотя, похоже, что нет