作者 主題: [問題]請問要如何取出陣列的值(進階用法)  (閱讀 9723 次)

0 會員 與 1 訪客 正在閱讀本文。

868nic

  • 懷疑的國中生
  • **
  • 文章數: 34
    • 檢視個人資料
目的:將所有表單的aa[ ]裡的值取出並當做資料庫where的比較條件
接變數的語法只需一行$aa = $_POST["aa"];
代碼: [選擇]

<?
if (isset($_POST["ok"])){
$aa = $_POST["aa"];
for($i = 0; $i < count($aa); $i++){
for($x = 0; $x < count($aa[$i]); $x++){
echo $aa[$i][$x] . "<br>";
}
}
}
?>
<form method="POST" action="1.php">
<input type="text" name="aa[11]" size="35"><br>
<input type="text" name="aa[22]" size="35"><br>
<input type="text" name="aa[33]" size="35"><br>
<input type="text" name="aa[44]" size="35"><br>
<input class="clean2" type="submit" value="確定" name="ok">
</form>

name="aa[ ]" 這個用法我會
但 name="aa[ ** ]" 的用法,第一次摸索
希望有會的人指點一下吧

duan

  • 榮譽博士
  • 活潑的大學生
  • ***
  • 文章數: 253
    • 檢視個人資料
Re: [問題]請問要如何取出陣列的值(進階用法)
« 回覆 #1 於: 2004-07-04 22:07 »
引述: "868nic"

代碼: [選擇]

<?
if (isset($_POST["ok"])){
$aa = $_POST["aa"];
for($i = 0; $i < count($aa); $i++){
for($x = 0; $x < count($aa[$i]); $x++){
echo $aa[$i][$x] . "<br>";
}
}
}
?>



try to use foreach
foreach($array as $key => $val){
}

供您參考   :)

唐小路

  • 活潑的大學生
  • ***
  • 文章數: 277
    • 檢視個人資料
[問題]請問要如何取出陣列的值(進階用法)
« 回覆 #2 於: 2004-07-04 22:32 »
name=aa[]與name=aa[**]的不同,在於[]沒指明的話是從0開始存值,[**]是指定**為你所希望的名稱,至於用法都一樣吧!!希望沒誤會你意思:)
....

868nic

  • 懷疑的國中生
  • **
  • 文章數: 34
    • 檢視個人資料
Re: [問題]請問要如何取出陣列的值(進階用法)
« 回覆 #3 於: 2004-07-05 00:25 »
引述: "duan"

try to use foreach
foreach($array as $key => $val){
}

供您參考

有點不懂能詳解嗎?
引述: "httang"

name=aa[]與name=aa[**]的不同,在於[]沒指明的話是從0開始存值,[**]是指定**為你所希望的名稱,至於用法都一樣吧!!希望沒誤會你意思


你說的沒錯,但我是要取出name="aa[ ** ]"裡的值,並不是表單元件value=""裡的值
name="aa[ ** ]"裡的值,是不固定的,有可能從1到未知數,它是用來比對資料表id欄位的編號
我echo $aa[$i]印出網頁是表單元件value=""裡的值,echo $i則是陣列數量

還是謝謝您熱心的解答

craig

  • 懷疑的國中生
  • **
  • 文章數: 69
    • 檢視個人資料
Re: [問題]請問要如何取出陣列的值(進階用法)
« 回覆 #4 於: 2004-07-05 00:55 »
引述: "868nic"
引述: "duan"

try to use foreach
foreach($array as $key => $val){
}

供您參考

你說的沒錯,但我是要取出name="aa[ ** ]"裡的值,並不是表單元件value=""裡的值
name="aa[ ** ]"裡的值,是不固定的,有可能從1到未知數,它是用來比對資料表id欄位的編號
我echo $aa[$i]印出網頁是表單元件value=""裡的值,echo $i則是陣列數量

還是謝謝您熱心的解答

你需要的不是 $key 就是 $value ,
所以 duan 應該算是有回答到你的問題才對。
我來改一下你的程式,應該會是
代碼: [選擇]

<?
if (isset($_POST["ok"])){
   $aa = $_POST["aa"];
   foreach ($aa as $key => $value){
      echo $aa[$key]."<br>";
   }
}
?>
<form method="POST" action="1.php">
<input type="text" name="aa[11]" size="35"><br>
<input type="text" name="aa[22]" size="35"><br>
<input type="text" name="aa[33]" size="35"><br>
<input type="text" name="aa[44]" size="35"><br>
<input class="clean2" type="submit" value="確定" name="ok">
</form>

868nic

  • 懷疑的國中生
  • **
  • 文章數: 34
    • 檢視個人資料
Re: [問題]請問要如何取出陣列的值(進階用法)
« 回覆 #5 於: 2004-07-05 02:48 »
引述: "craig"
引述: "868nic"
引述: "duan"

try to use foreach
foreach($array as $key => $val){
}

供您參考

你說的沒錯,但我是要取出name="aa[ ** ]"裡的值,並不是表單元件value=""裡的值
name="aa[ ** ]"裡的值,是不固定的,有可能從1到未知數,它是用來比對資料表id欄位的編號
我echo $aa[$i]印出網頁是表單元件value=""裡的值,echo $i則是陣列數量

還是謝謝您熱心的解答

你需要的不是 $key 就是 $value ,
所以 duan 應該算是有回答到你的問題才對。
我來改一下你的程式,應該會是
代碼: [選擇]

<?
if (isset($_POST["ok"])){
   $aa = $_POST["aa"];
   foreach ($aa as $key => $value){
      echo $aa[$key]."<br>";
   }
}
?>
<form method="POST" action="1.php">
<input type="text" name="aa[11]" size="35"><br>
<input type="text" name="aa[22]" size="35"><br>
<input type="text" name="aa[33]" size="35"><br>
<input type="text" name="aa[44]" size="35"><br>
<input class="clean2" type="submit" value="確定" name="ok">
</form>

我剛測了您修改的方法
結果還是echo表單<input type="text" name="aa[11]" size="35" value"">的
value=""輸入值
代碼: [選擇]

<?
if (isset($_POST["ok"])){
   $aa = $_POST["aa"];
   for ($i = 1; $i <= count($aa); $i++){
echo $aa[$i] . "<br>";
   }
}
?>

跟上面方法結果是一樣的

我再說明白點好了
我只要echo表單name="aa[11]"裡的"11"
name="aa[**]"也可以當做name="aa[資料表id欄位]"
用來比對資料表id欄位編號是否相同

或許會問為什麼不直接將表單元件用不同名稱就好阿
假設表單有4個元件
<input type="text" name="aa" size="35"><br>
<input type="text" name="bb" size="35"><br>
<input type="text" name="cc" size="35"><br>
<input type="text" name="dd" size="35"><br>
那麼我需要寫4行來接變數
$aa = $_POST["aa"];
$bb = $_POST["bb"];
$cc = $_POST["cc"];
$dd = $_POST["dd"];
那如果有幾百個表單元件呢?
那會寫到手斷掉吧

我之會這樣寫是因為參考某隻程式的寫法,但又看不懂,所以跟大家一起研究研究

dark

  • 俺是博士!
  • *****
  • 文章數: 1581
    • 檢視個人資料
Re: [問題]請問要如何取出陣列的值(進階用法)
« 回覆 #6 於: 2004-07-05 04:28 »
引述: "868nic"
代碼: [選擇]

<?
if (isset($_POST["ok"])){
   $aa = $_POST["aa"];
   for ($i = 1; $i <= count($aa); $i++){
echo $aa[$i] . "<br>";
   }
}
?>

跟上面方法結果是一樣的

我再說明白點好了
我只要echo表單name="aa[11]"裡的"11"
name="aa[**]"也可以當做name="aa[資料表id欄位]"
用來比對資料表id欄位編號是否相同

不知您的意思是否是:
echo $aa . "[" . $i . "]=" . $aa[$i] . "<br>";
 
另外... 記得有一個函式 , 可以把 "字串轉換成變數"
那 , 變數名稱也可以動態嚕.....

craig

  • 懷疑的國中生
  • **
  • 文章數: 69
    • 檢視個人資料
[問題]請問要如何取出陣列的值(進階用法)
« 回覆 #7 於: 2004-07-05 10:17 »
引述: "868nic"

我再說明白點好了
我只要echo表單name="aa[11]"裡的"11"
name="aa[**]"也可以當做name="aa[資料表id欄位]"
用來比對資料表id欄位編號是否相同


你把
代碼: [選擇]
echo $aa[$key]."<br>";
改成
代碼: [選擇]
echo $key."<br>";
就應該是你要的了。

868nic

  • 懷疑的國中生
  • **
  • 文章數: 34
    • 檢視個人資料
[問題]請問要如何取出陣列的值(進階用法)
« 回覆 #8 於: 2004-07-05 12:21 »
引述: "craig"
引述: "868nic"

我再說明白點好了
我只要echo表單name="aa[11]"裡的"11"
name="aa[**]"也可以當做name="aa[資料表id欄位]"
用來比對資料表id欄位編號是否相同


你把
代碼: [選擇]
echo $aa[$key]."<br>";
改成
代碼: [選擇]
echo $key."<br>";
就應該是你要的了。


終於可以了,謝謝craig大大

我也找到另外一種用法
代碼: [選擇]

<?
if (isset($_POST["ok"])){
   $aa = $_POST["aa"];
   while (list($key) = each($aa)){
   echo $key . "<br>";
   }
}
?>

請問這二種用法何者效率較佳

craig

  • 懷疑的國中生
  • **
  • 文章數: 69
    • 檢視個人資料
[問題]請問要如何取出陣列的值(進階用法)
« 回覆 #9 於: 2004-07-05 13:32 »
寫 php 我很少注意到效率問題,所以很難給你建議,
而且實際應用時,也沒有絕對哪個用法比較好。
一般來說,我比較重視可讀性,
也就是別人一看就知道我這段程式要做什麼。
例如原來那段的 foreach 我會改成
 foreach (array_keys($aa) as $key)
這樣看的人就知道我這一段只要用到 array 的 key

duan

  • 榮譽博士
  • 活潑的大學生
  • ***
  • 文章數: 253
    • 檢視個人資料
Re: [問題]請問要如何取出陣列的值(進階用法)
« 回覆 #10 於: 2004-07-05 18:45 »
引述: "868nic"
引述: "duan"

try to use foreach
foreach($array as $key => $val){
}

供您參考

有點不懂能詳解嗎?


也許當您看到 foreach 這個 keyword 就去查 php manual 的話,
那問題應該很快就可以解決, 就不需要 craig 兄回答的那麼詳細了.

希望不要總是等別人給完整的答案,  善用 print_r 或 var_dump,
debug php 的日子會輕鬆許多.  供您參考   :)