Created
October 10, 2012 16:40
-
-
Save wgkoro/3866770 to your computer and use it in GitHub Desktop.
URLのパラメーター文字列を分解・比較するためのクラス
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 | |
/** | |
Author : wg_koro | |
LastUpdate : 2012/10/11 | |
License : MIT | |
URLのパラメーター文字列を分解・比較するためのクラス | |
使い方: | |
$p = new UrlParam(); | |
$param = 'param1=aa¶m2=bb¶m3=cc'; | |
var_dump($p->getHash($param)); | |
-> array(3) { | |
["param1"]=> | |
string(2) "aa" | |
["param2"]=> | |
string(2) "bb" | |
["param3"]=> | |
string(2) "cc" | |
} | |
// 同じパラメーター名が複数ある場合、値はカンマで連結して格納 | |
$same_param_name = 'param[]=aa¶m[]=bb¶m2=cc'; | |
var_dump($p->getHash($same_param_name)); | |
-> array(2) { | |
["param[]"]=> | |
string(5) "aa,bb" | |
["param2"]=> | |
string(2) "cc" | |
} | |
$param = 'param1=aa¶m2=bb¶m3=cc'; | |
$same_param = 'param1=aa¶m2=bb¶m3=cc'; | |
var_dump($p->isSame($param, $same_param)); | |
-> true | |
$param = 'param1=aa¶m2=bb¶m3=cc'; | |
$different = 'param1=a¶m2=bb¶m3=cc'; | |
var_dump($p->isSame($param, $different)); | |
-> false | |
// パラメーターの順番が違うだけなら同一とする | |
$param = 'param1=aa¶m2=bb¶m3=cc'; | |
$change_order = 'param2=bb¶m3=cc¶m1=aa'; | |
var_dump($p->isSame($param, $change_order)); | |
-> true | |
*/ | |
class UrlParam | |
{ | |
/** | |
* パラメーター文字列を連想配列形式にして返す | |
* | |
* @param <String> $query_str パラメーター文字列 (ex.param1=aa¶m2=bb) | |
* @return <Void> | |
*/ | |
public function getHash($param_str){ | |
$param = array(); | |
if(! empty($param_str)){ | |
$param = $this->breakDown($param_str); | |
} | |
return $param; | |
} | |
/** | |
* 渡された2つのパラメーター文字列を比較する | |
* パラメーターの順序が入れ替わっている場合でも、同一パラメーターと判定する。 | |
* | |
* @param <String> $param1 比較元のパラメーター文字列 | |
* @param <String> $param2 比較対象のパラメーター文字列 | |
* @return <Bool> true:同一パラメーター, false:異なるパラメーター | |
*/ | |
public function isSame($param1, $param2){ | |
$hash1 = array(); | |
$hash2 = array(); | |
if(! empty($param1)){ | |
$hash1 = $this->breakDown($param1); | |
} | |
if(! empty($param2)){ | |
$hash2 = $this->breakDown($param2); | |
} | |
if($hash1 == $hash2){ | |
return true; | |
} | |
return false; | |
} | |
/** | |
* パラメーター文字列を連想配列形式にして返す | |
* 同一パラメーター名が複数存在する場合は、カンマで値を連結する。 (PHPのparam[]=a¶m[]=bといった文字列) | |
* param1=aa¶m2 のような、不自然なパラメーター文字列の場合はtrigger_error()を実行 | |
* | |
* @param <String> $param_str パラメーター文字列 | |
* @return <Hash> 連想配列 | |
*/ | |
private function breakDown($param_str){ | |
$param_hash = array(); | |
$each_param = explode('&', $param_str); | |
foreach($each_param as $param){ | |
$param_arr = explode('=', $param); | |
if(count($param_arr) < 2){ | |
// aaa=111&bbb のような、パラメーター文字列として不自然な場合はfalseを返す | |
trigger_error("Invalid param strings!", E_USER_ERROR); | |
} | |
if(empty($param_hash[$param_arr[0]])){ | |
$param_hash[$param_arr[0]] = $param_arr[1]; | |
} | |
else{ | |
$param_hash[$param_arr[0]] .= ','.$param_arr[1]; | |
} | |
} | |
return $param_hash; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment