Life of Music
2007-07-26 06:57:34 UTC
因為自己需要所以就寫了..
雖然網路上應該已經有了,但是不知道怎麼找比較好
(直接google到的都沒有考慮到multi-dimension的狀況)
http://kong0107.blogspot.com/2007/07/php-array2url.html
我很喜歡用multi-dimensional array來傳送表單資料(印象中在ASP不能直接這樣用),
可是這樣的東西在做分頁界面的時候很難還原成URL,所以就寫了一個array2url:
function array2url($arr,$main='') {
$tmp = array();
foreach($arr as $key=>$val) {
$prefix = $main ? sprintf('%s[%s]', $main, $key) : $key;
$tmp[] = is_array($val) ? array2url($val, $prefix) : "$prefix=$val";
}
return implode('&',$tmp);
}
範例:
$abc = array(
'ohmyhoney' => array(
'recede' => 941505,
'tbex' => array(
'school' => 'nctu',
'department' => 'cs'
)
),
'bango' => 'banco'
);
echo array2url( $abc );
結果:
ohmyhoney[recede]=941505&ohmyhoney[tbex][school]=nctu
&ohmyhoney[tbex][department]=cs&bango=banco
所以之後就可以:
$arr = $_GET['arr'];
unset( $arr['page'] );
for( $page = 1; $page <= $amount / $records_per_page; $page++ )
printf(
'<a href="http://www.blogger.com/webpage.php?%s&page=%d">第%d頁</a>',
htmlentities( array2url( $arr ) ),
$page,
$page
);
比較討厭的是因為寫成recursive function
所以連結的部份要符合W3C標準的話
要自己再加上一個htmlentities()
另外還有個狀況是如果是還原自$_GET的話
仍可能和$_SERVER['REQUEST_URI']不一樣
如a[]=3會變成a[0]=3
不過好像就只是網址變長而已,並不影響PHP的運作
(但是仍要小心網址因此而太長而超過HTTP的限制)
--
不試試看怎麼會知道呢?
[1;30mhttp://kong0107.blogspot.com/[m
--
[1;30;40m夫兵者不祥之器物或惡之故有道者不處君子居則貴左用兵則貴右兵者不祥之器非君子[m
[1;30m之器不得已[37m[30m而用之恬淡為上勝而不美而美之者是樂殺人夫樂殺人者則不可得志於天下
[m[1;30m矣吉事尚左凶事尚右偏將軍居左上將軍居右言以喪禮處之殺人之眾以哀悲泣之戰勝以[m
[1;30m喪禮處之道常[37m無名[30m樸雖小天下莫能臣侯王若能守之萬物將自賓天地相合以降甘露民莫[m
[1;30m之令而自均始制有名名亦既有夫亦將知止知 [37m218-170-108-248.dynamic.hinet.net[30m海[m
雖然網路上應該已經有了,但是不知道怎麼找比較好
(直接google到的都沒有考慮到multi-dimension的狀況)
http://kong0107.blogspot.com/2007/07/php-array2url.html
我很喜歡用multi-dimensional array來傳送表單資料(印象中在ASP不能直接這樣用),
可是這樣的東西在做分頁界面的時候很難還原成URL,所以就寫了一個array2url:
function array2url($arr,$main='') {
$tmp = array();
foreach($arr as $key=>$val) {
$prefix = $main ? sprintf('%s[%s]', $main, $key) : $key;
$tmp[] = is_array($val) ? array2url($val, $prefix) : "$prefix=$val";
}
return implode('&',$tmp);
}
範例:
$abc = array(
'ohmyhoney' => array(
'recede' => 941505,
'tbex' => array(
'school' => 'nctu',
'department' => 'cs'
)
),
'bango' => 'banco'
);
echo array2url( $abc );
結果:
ohmyhoney[recede]=941505&ohmyhoney[tbex][school]=nctu
&ohmyhoney[tbex][department]=cs&bango=banco
所以之後就可以:
$arr = $_GET['arr'];
unset( $arr['page'] );
for( $page = 1; $page <= $amount / $records_per_page; $page++ )
printf(
'<a href="http://www.blogger.com/webpage.php?%s&page=%d">第%d頁</a>',
htmlentities( array2url( $arr ) ),
$page,
$page
);
比較討厭的是因為寫成recursive function
所以連結的部份要符合W3C標準的話
要自己再加上一個htmlentities()
另外還有個狀況是如果是還原自$_GET的話
仍可能和$_SERVER['REQUEST_URI']不一樣
如a[]=3會變成a[0]=3
不過好像就只是網址變長而已,並不影響PHP的運作
(但是仍要小心網址因此而太長而超過HTTP的限制)
--
不試試看怎麼會知道呢?
[1;30mhttp://kong0107.blogspot.com/[m
--
[1;30;40m夫兵者不祥之器物或惡之故有道者不處君子居則貴左用兵則貴右兵者不祥之器非君子[m
[1;30m之器不得已[37m[30m而用之恬淡為上勝而不美而美之者是樂殺人夫樂殺人者則不可得志於天下
[m[1;30m矣吉事尚左凶事尚右偏將軍居左上將軍居右言以喪禮處之殺人之眾以哀悲泣之戰勝以[m
[1;30m喪禮處之道常[37m無名[30m樸雖小天下莫能臣侯王若能守之萬物將自賓天地相合以降甘露民莫[m
[1;30m之令而自均始制有名名亦既有夫亦將知止知 [37m218-170-108-248.dynamic.hinet.net[30m海[m