Preg_replace не работает в контроллере laravel

#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. Спасибо. Я привык помещать все в регулярные выражения, так как они могут все проверять. Хотя, похоже, что нет