在asp中,多選下拉式清單已經被處理成一個數組,如:
<select name="slType" id="slType" multiple="multiple">
<option value="news">news</option>
<option value="product">product</option>
<option value="user">user</option>
</select>
按Ctrl選中news和product選項後,點擊提交按鈕,用request("slType")返回slType的值,得到news,product。
然而在php中,當按住CTRL 多選時, 用$_POST['slType']每次總返回選中的最後一個值,怎麼才能取得所有的值?
第一,將多選下拉式清單命名為一個數組,如:
<select name="slType[]" id="slType[]" multiple="multiple">
<option value="news">news</option>
<option value="product">product</option>
<option value="user">user</option>
</select>
第二,用foreach迴圈
$temp="," //為什麼將temp變數初始化為 “,”,後面說明原因
foreach($_POST['strType'] as $key=>$value)
{
$temp=$temp . $value . ",";
}
如果多選項被全選,最終$temp傳回值為,news,product,user,,即通過這一步就可以將多選下拉式清單中的值整合成 ,news,product,user, ,然後將這個值輸入到資料庫中,是不是很方便。
在編輯多選框的時候,當從資料庫中讀取出多選項,如何讓有的選項被選中。通過explode函數可以很好的解決這個問題。
比如從資料庫中slType的值是 “,product,user,”,將其賦給$temp,
<select name="slType[]" id="slType[]" multiple="multiple">
<option value="news" <? if($count=count(explode(",news,",$temp)) > 1) { echo "selected";}?>>news</option>
<option value="product" <? if($count=count(explode(",product,",$temp)) > 1) { echo "selected";}?>>product</option>
<option value="user" <? if($count=count(explode(",user,",$temp)) > 1) { echo "selected";}?>>user</option>
</select>
這樣在編輯的時候,product和user選項預設被選中。為什麼要在前面加一個“,”,因為這樣分割數組的時候準確性要高一些,如果不加這個符號,在分割字串的時候,將以“user,”作為分割,這樣如果資料庫中有一個選項為vipuser時,下拉式清單在編輯的時候不僅vipuser會被選中,user選項也會被選中。
附:
foreach( as $key=>$value)函數,遍曆array_expression數組,每次迴圈中,當前單元的值被賦給 $value,當前單元的索引值被賦給變數 $key, 並且數組內部的指標向前移一步。
explode
explode
(PHP 4, PHP 5)
explode — 使用一個字串分割另一個字串
說明
array explode ( string $separator, string $string [, int $limit] )
此函數返回由字串組成的數組,每個元素都是 string 的一個子串,它們被字串 separator 作為邊界點分割出來。如果設定了 limit 參數,則返回的數組包含最多 limit 個元素,而最後那個元素將包含string 的剩餘部分。
如果 separator 為空白字串(""),explode() 將返回 FALSE。如果 separator 所包含的值在 string 中找不到,那麼 explode() 將返回包含 string 單個元素的數組。
如果 limit 參數是負數,則返回除了最後的 -limit 個元素外的所有元素。此特性是 PHP 5.1.0 中新增的。
由於曆史原因,雖然 implode() 可以接收兩種參數順序,但是 explode() 不行。你必須保證 separator參數在 string 參數之前才行。
注意: 參數 limit 是在 PHP 4.0.1 中加入的。
例 2301. explode() 例子
<?php
// 樣本 1
$pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);
echo $pieces[0]; // piece1
echo $pieces[1]; // piece2
// 樣本 2
$data = "foo:*:1023:1000::/home/foo:/bin/sh";
list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data);
echo $user; // foo
echo $pass; // *
?>
例 2302. limit 參數例子
<?php
$str = 'one|two|three|four';
// 正數的 limit
print_r(explode('|', $str, 2));
// 負數的 limit(自 PHP 5.1 起)
print_r(explode('|', $str, -1));
?>
上例將輸出:
Array( [0] => one [1] => two|three|four)Array( [0] => one [1] => two [2] => three)