Created
July 25, 2012 19:48
-
-
Save yeroon/3178175 to your computer and use it in GitHub Desktop.
PHP 5.3 Http QueryString Builder
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace Yeroon; | |
/** | |
* Build querystring | |
* | |
* Build a querystring with add/remove features. Has array support to support adding and removing of params using square | |
* brackets (?foo[]=bar). | |
* | |
* Example: | |
* <code> | |
* // http://someurl.com/?a=1&b2 | |
* $hqb = new HttpQueryBuilder($_GET); | |
* $hqb->add('c', '3'); // a=1&b=2&c3 | |
* $hqb->remove('b'); // a=1&c=3 | |
* $hqb->add(array('d' => array('4','5','6')); // a=1&c=3&d[0]=4&d[1]=5&d[2]=6 | |
* $hqb->remove(array('d' => array('4','6'))); // a=1&c=3&d[0]=5 | |
* </code> | |
* | |
* @author Jeroen Schouten <jgjschouten@gmail.com> | |
* @link http://www.github.com/yeroon | |
*/ | |
class HttpQueryBuilder | |
{ | |
/** | |
* @var array|null | |
*/ | |
protected $_params; | |
/** | |
* @var string | |
*/ | |
protected $_numericPrefix; | |
/** | |
* @var string | |
*/ | |
protected $_argSeparator = '&'; | |
/** | |
* Build querystring | |
* | |
* Build a querystring with add/remove features. Has array support to support adding and removing of params using | |
* square brackets (?foo[]=bar). | |
* | |
* Example: | |
* <code> | |
* // http://someurl.com/?a=1&b2 | |
* $hqb = new HttpQueryBuilder($_GET); | |
* $hqb->add('c', '3'); // a=1&b=2&c3 | |
* $hqb->remove('b'); // a=1&c=3 | |
* $hqb->add(array('d' => array('4','5','6')); // a=1&c=3&d[0]=4&d[1]=5&d[2]=6 | |
* $hqb->remove(array('d' => array('4','6'))); // a=1&c=3&d[0]=5 | |
* </code> | |
* | |
* @param array|null $params If null, the $_GET superglobal will be used | |
*/ | |
public function __construct($params = null) | |
{ | |
if($params === null){ | |
$params = $_GET; | |
} | |
$this->setParams($params); | |
} | |
/** | |
* Key-value pair or an associative array | |
* | |
* @param string|array $key | |
* @param mixed|null $value | |
* @return HttpQueryBuilder | |
*/ | |
public function add($key, $value = null) | |
{ | |
if(is_array($key)){ | |
$this->_params = \array_replace_recursive($this->_params, $key); | |
} else { | |
$this->_params[$key] = $value; | |
} | |
return $this; | |
} | |
/** | |
* Key or associative array to remove | |
* | |
* @param array|string $key | |
* @return HttpQueryBuilder | |
*/ | |
public function remove($key) | |
{ | |
if(is_array($key)){ | |
$diff = \array_diff($this->_params[\key($key)], $key[\key($key)]); | |
$this->_params[\key($key)] = \array_values($diff); | |
} else { | |
unset($this->_params[$key]); | |
} | |
return $this; | |
} | |
/** | |
* @return string | |
*/ | |
public function toString() | |
{ | |
return $this->__toString(); | |
} | |
/** | |
* @return string | |
*/ | |
public function __toString() | |
{ | |
return \http_build_query($this->_params, $this->_numericPrefix, $this->_argSeparator); | |
} | |
/** | |
* The argument separator. Default is '&' | |
* | |
* @param string $argSeparator | |
* @return HttpQueryBuilder | |
*/ | |
public function setArgSeparator($argSeparator) | |
{ | |
$this->_argSeparator = $argSeparator; | |
return $this; | |
} | |
/** | |
* @return string | |
*/ | |
public function getArgSeparator() | |
{ | |
return $this->_argSeparator; | |
} | |
/** | |
* The prefix for all params. Default is null | |
* | |
* @param string $numericPrefix | |
* @return HttpQueryBuilder | |
*/ | |
public function setNumericPrefix($numericPrefix) | |
{ | |
$this->_numericPrefix = $numericPrefix; | |
return $this; | |
} | |
/** | |
* @return string|null | |
*/ | |
public function getNumericPrefix() | |
{ | |
return $this->_numericPrefix; | |
} | |
/** | |
* @param $params | |
* @return HttpQueryBuilder | |
*/ | |
public function setParams($params) | |
{ | |
$this->_params = $params; | |
return $this; | |
} | |
/** | |
* @return array|null | |
*/ | |
public function getParams() | |
{ | |
return $this->_params; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment