Как можно упростить функцию? Есть ли другие решения?

sfsf

Новичок
Идея такая

Брать параметры из Get и формировать на странице новые ссылки с учетом этих параметров

Я думаю вы не раз делали сайт где есть сортировка и еще куча параметров которые работают вместе

Быть может вы мне подскажете правильное решение реализации, а пока я покажу что я сделал



PHP:
<?php
//эти значения из базы, но для понятности присваиваю им значения
	$pack->user_title['category_id']=1;
	$pack->user_title['sections_id']=2;
	$pack->user_title['city_id']=3;

//так я формирую новые параметры параметры
		$pack->add_url(array('category' => $pack->user_title['category_id']),'category');
		$pack->add_url(array('section' => $pack->user_title['sections_id']),'section');
		$pack->add_url(array('city' => $pack->user_title['city_id']),'city');
?>



PHP:
<a href="index.php?<?php echo $pack->get_url('category'); ?>">Категория</a>
<a href="index.php?<?php echo $pack->get_url('section'); ?>">Раздел</a>
<a href="index.php?<?php echo $pack->get_url('city'); ?>">Город</a>


Мы находимся на странице index.php
Вот как будут отображаться ссылки


PHP:
<a href="index.php?category=1">Категория</a>
<a href="index.php?section=2">Раздел</a>
<a href="index.php?city=3">Город</a>


Теперь мы зайдем на страницу index.php?section=2
Ссылки будут отображаться с учетом параметра


PHP:
<a href="index.php?category=1&section=2">Категория</a>
<a href="index.php?section=2">Раздел</a>
<a href="index.php?section=2&city=3">Город</a>


Теперь мы заходим на страницу index.php?section=2&city=3
Ссылки будут такими


PHP:
<a href="index.php?category=1&section=2&city=3">Категория</a>
<a href="index.php?section=2&city=3">Раздел</a>
<a href="index.php?section=2&city=3">Город</a>


Теперь реализация самих функция, они находятся в классе


PHP:
	public function add_url(array $param_arr, $part) {
		if(!array_key_exists($part, $this->url)) {
			$this->url[$part]=array();
		}
		foreach($_GET as $k => $v) {
			if($k!='p') {
				$this->url[$part]=functions::arr_union($this->url[$part], array($k => check::html($v)));
			}
		}
		foreach($param_arr as $k => $v) {
			$this->url[$part]=functions::arr_union($this->url[$part], array($k => check::html($v)));
		}
	}
	
	public function get_url($part) {
		return http_build_query($this->url[$part]);
	}


Функция functions::arr_union сливает 2 масива в один с заменой одинаковых параметров в пользу нового массива
Функция check::html это htmlspecialchars(stripslashes())

Как можно упростить всю эту реализацию?
Что почитать по теме? и все ли учтено в плане безопасности?
 

hell0w0rd

Продвинутый новичок
https://github.com/fabpot/Create-Your-Framework/blob/master/book/part04.rst - почитать
http://php.net/manual/en/function.array-replace.php - изучить
check::* - не должно ничего эскейпить, вообще менять не должно, в каком-нибудь с++ у всех методов этого класса аргументы должны были бы идти с параметром const и возвращать true или false
замени на convert, а лучше вообще убери подобное, это не классы, это набор хелперов
 
Сверху