Discussion:
[分享] array2url
(时间太久无法回复)
Life of Music
2007-07-26 06:57:34 UTC
Permalink
因為自己需要所以就寫了..
雖然網路上應該已經有了,但是不知道怎麼找比較好
(直接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的限制)

--
不試試看怎麼會知道呢?
http://kong0107.blogspot.com/
--
夫兵者不祥之器物或惡之故有道者不處君子居則貴左用兵則貴右兵者不祥之器非君子
之器不得已而用之恬淡為上勝而不美而美之者是樂殺人夫樂殺人者則不可得志於天下
矣吉事尚左凶事尚右偏將軍居左上將軍居右言以喪禮處之殺人之眾以哀悲泣之戰勝以
喪禮處之道常無名樸雖小天下莫能臣侯王若能守之萬物將自賓天地相合以降甘露民莫
之令而自均始制有名名亦既有夫亦將知止知 218-170-108-248.dynamic.hinet.net海
ㄚ凱..
2007-07-26 10:14:50 UTC
Permalink
※ 引述《***@bbs.wretch.cc (Life of Music)》之銘言:

你寫的,是不是類似這個的功能呢?
http://tw.php.net/manual/en/function.http-build-query.php

--
若真的有心.不用靠別人一樣可以找到辦法.
如果不願意用心.我想說了也是白說.
Darkhero (Kyle Chiang)
***@gmail.com
--
※ Origin: SayYA 資訊站 <bbs.sayya.org> 
◆ From: 220-135-136-159.hinet-ip.hinet.net
Life of Music
2007-07-26 14:39:38 UTC
Permalink
Post by ㄚ凱..
你寫的,是不是類似這個的功能呢?
http://tw.php.net/manual/en/function.http-build-query.php
QQ..真的是耶,除了空格的編碼方式不同之外都很像(RFC1738的關係)
我之前都在String Functions找,難怪沒找到..(炸)

不過我還在用4.4,所以還不算做白工....(苦笑)
(天音:連官網都推薦要升到5.2了啦(/‵′)/~ ╧╧)

--
就算是這個世界 把我拋棄
而至少快樂傷心我自己決定
http://kong0107.blogspot.com/
--
kong 在 07/07/26 22:39:38 從 218.170.108.248 修改這篇文章
ㄚ凱..
2007-07-27 03:42:15 UTC
Permalink
Post by Life of Music
Post by ㄚ凱..
你寫的,是不是類似這個的功能呢?
http://tw.php.net/manual/en/function.http-build-query.php
QQ..真的是耶,除了空格的編碼方式不同之外都很像(RFC1738的關係)
我之前都在String Functions找,難怪沒找到..(炸)
不過我還在用4.4,所以還不算做白工....(苦笑)
(天音:連官網都推薦要升到5.2了啦(/‵′)/~ ╧╧)
下面的回應當中有人也有做一個...:p..
我當初就是直接抓那個來用的...

--
若真的有心.不用靠別人一樣可以找到辦法.
如果不願意用心.我想說了也是白說.
Darkhero (Kyle Chiang)
***@gmail.com
--
※ Origin: SayYA 資訊站 <bbs.sayya.org> 
◆ From: 220-135-136-159.hinet-ip.hinet.net

Loading...