陣例的跑法?跟sizeof

edited 十月 2013 in PHP新手區
$SQL="SELECT * FROM fuzzy64";

$result = mysql_query($SQL);
$I = 0;
while ($answers = mysql_fetch_row($result))
{
for ($J=0;$J<sizeof($answers);$J++)
{
echo "[$I][$J]=";
echo $answers[$J] . " ";
}
echo "<br>";
$I++;
}

這是我之前好幾位高手教我的的一個程試~與myslq的表單(fuzzy64)作的連結~
跑的二維座標是:
[0][0] [0][1] [0][2]... ....
[1][0] [1][1]... ...
[2][0].. ...
.
.
.
順序是:(先讀"前"座標為0,讀完"前"座標為0的所有座標後換行,再跑下一個"前"座標為1的,跑完再跑"前"座標為2的)

可是後來我發現假如我要跑出來的二維座標是
[0][0] [1][0] [2][0]... ...
[0][1] [1][1] ... ...
[0][2] ... ...
.
.
.
順序是:(先讀"後"座標為0,讀完"後"座標為0的所有座標後換行,再跑下一個"後"座標為1的,跑完再跑"後"座標為2的)
我還能用sizeof這個方法跑嗎?
用sizeof的是不管之後我的表單再加多少筆新的記錄進去~我都不用在呼程式要不要改
可不可以也是用sizeof的方法run出我要的陣例順序咧~?

原始討論: http://twpug.net/x/modules/newbb/viewtopic.php?topic_id=1995

評論

  • edited 八月 2006
    只是順序問題
    不過必須先存到array中
    等資料全部處理完才能使用

    $I = 0;
    $Ary = array();
    while ($answers = mysql_fetch_row($result))
    {
    for ($J=0;$J<sizeof($answers);$J++)
    {
    $Ary[$J][$I] = $answers[$J];
    }
    $I++;
    }
    print_r($Ary);
  • edited 八月 2006
    從程式碼看來, $J 是欄位名稱, $I 是資料列序號,如果要改成先取得特定欄位所有資料,也許可以改成這樣:

    1. 取得所有資料列數
    2. 以列數為基礎安排迴圈
    3. 在每個迴圈查詢該列的指定欄位數值
    4. 輸出

    也可以改成一次將所有資料取出,然後當作陣列存取,只是資料量大或者需要分頁等作業時會顯得比較浪費資源。
  • edited 八月 2006
    sam0228 寫道:
    只是順序問題
    不過必須先存到array中
    等資料全部處理完才能使用

    $I = 0;
    $Ary = array();
    while ($answers = mysql_fetch_row($result))
    {
    for ($J=0;$J<sizeof($answers);$J++)
    {
    $Ary[$J][$I] = $answers[$J];
    }
    $I++;
    }
    print_r($Ary);

    之前講的方向錯誤
    存成array不需要改變順序
    $Ary[$I][$J] = $answers[$J];
    而是顯示內容的時候才要處理

    由於html是由上而下顯示的
    所以只能先把資料都讀出才能達到你要的顯示方式
  • edited 八月 2006
    sam0228 寫道:
    sam0228 寫道:
    只是順序問題
    不過必須先存到array中
    等資料全部處理完才能使用

    $I = 0;
    $Ary = array();
    while ($answers = mysql_fetch_row($result))
    {
    for ($J=0;$J<sizeof($answers);$J++)
    {
    $Ary[$J][$I] = $answers[$J];
    }
    $I++;
    }
    print_r($Ary);

    之前講的方向錯誤
    存成array不需要改變順序
    $Ary[$I][$J] = $answers[$J];
    而是顯示內容的時候才要處理

    由於html是由上而下顯示的
    所以只能先把資料都讀出才能達到你要的顯示方式

    問題1:是指說不顯示內容時$Ary[$I][$J] = $answers[$J];不用改就會跑出我要的方法嗎?要顯示時就改成$Ary[$J][$I] = $answers[$J];嗎?
    問題2:$Ary[$J][$I] = $answers[$J];不就是一口氣吧資料都讀出存在$Ary這個陣列中嗎?
    問題3:$answers = mysql_fetch_row($result))這行程試是說一次抓一筆記錄還是一口氣全部抓出來呢?如果是一次抓一筆為什麼他那麼聰明第抓第一筆之後抓第二筆,抓完還會自已結束呢?
  • edited 八月 2006
    kiang 寫道:
    從程式碼看來, $J 是欄位名稱, $I 是資料列序號,如果要改成先取得特定欄位所有資料,也許可以改成這樣:

    1. 取得所有資料列數
    2. 以列數為基礎安排迴圈
    3. 在每個迴圈查詢該列的指定欄位數值
    4. 輸出

    也可以改成一次將所有資料取出,然後當作陣列存取,只是資料量大或者需要分頁等作業時會顯得比較浪費資源。
    問題1:
    1. 取得所有資料列數
    是說我先取個變數$R讓他=fetch_row嗎?
  • edited 八月 2006
  • edited 八月 2006
    cherry7402 寫道:
    問題1:是指說不顯示內容時$Ary[$I][$J] = $answers[$J];不用改就會跑出我要的方法嗎?要顯示時就改成$Ary[$J][$I] = $answers[$J];嗎?
    問題2:$Ary[$J][$I] = $answers[$J];不就是一口氣吧資料都讀出存在$Ary這個陣列中嗎?
    問題3:$answers = mysql_fetch_row($result))這行程試是說一次抓一筆記錄還是一口氣全部抓出來呢?如果是一次抓一筆為什麼他那麼聰明第抓第一筆之後抓第二筆,抓完還會自已結束呢?

    1&2
    由於html的限制(由上而下由左至右)
    你要先顯示第二維再一維就只能先把資料全部撈完才能達到你要的方式
    當資料都撈完了,想怎魔顯示反而沒那麼大的難度

    3
    我不是php開發人員所以我不知道為什麼mysql_fetch_row會這麼聰明第抓第一筆之後抓第二筆,抓完還會自已結束
    我只知道用while ($answers = mysql_fetch_row($result))能幫我抓完就好
    我只是用,沒有那個能力探討一個語言為什麼這麼聰明
    如果你真有興趣,可以抓.src慢慢探索
  • edited 八月 2006
    因為我實在不懂什麼叫"把值抓下來存到陣例裡"
    這句話要怎麼用程試寫~
    所以我就自己亂寫了一下~
    for ($r=0;$r<3;$r++)
    {
    while ($row = mysql_fetch_row($result))
    {

    if ($row[$j] == "1")
    {
    $ai = 0;
    $bi = 0;
    $ci = 0.25;
    $ai_t == $ai_t+=$ai;
    $bi_t == $bi_t+=$bi;
    $ci_t == $ci_t+=$ci;
    }
    else
    if ($row[$j] == "2")
    {
    $ai = 0;
    $bi = 0.25;
    $ci = 0.5;
    $ai_t == $ai_t+=$ai;
    $bi_t == $bi_t+=$bi;
    $ci_t == $ci_t+=$ci;
    }
    else
    if ($row[$j] == "3")
    {
    $ai = 0.25;
    $bi = 0.5;
    $ci = 0.75;
    $ai_t == $ai_t+=$ai;
    $bi_t == $bi_t+=$bi;
    $ci_t == $ci_t+=$ci;
    }
    else
    if ($row[$j] == "4")
    {
    $ai = 0.5;
    $bi = 0.75;
    $ci = 1;
    $ai_t == $ai_t+=$ai;
    $bi_t == $bi_t+=$bi;
    $ci_t == $ci_t+=$ci;
    }
    else
    if ($row[$j] == "5")
    {
    $ai = 0.75;
    $bi = 1;
    $ci = 1;
    $ai_t == $ai_t+=$ai;
    $bi_t == $bi_t+=$bi;
    $ci_t == $ci_t+=$ci;
    }
    $ai = ($ai_t/3)*($ai_t/3);
    $bi = ($bi_t/3)*($bi_t/3);
    $ci = ($ci_t/3)*($ci_t/3);
    $di = sqrt(($ai+$bi+$ci)/3);
    $ai1 = pow(1-$ai_t,2);
    $bi1 = pow(1-$bi_t,2);
    $ci1 = pow(1-$ci_t,2);
    $di1 = sqrt(($ai1+$bi1+$ci1)/3);

    }
    echo 'ai_t'.$ai_t . "  " ;
    echo 'ai'.$ai . "  ";
    echo 'bi'.$bi . "  ";
    echo 'ci'.$ci . "  ";
    echo 'di'.$di . "  ";
    echo 'di1'.$di1 . "  ";
    echo '距離'.$di/($di+$di1) . "  ";
    echo '中心法'.(2*$bi_t+$ci_t+$ai_t)/4;
    echo "<br>";
    $j++;
    }
    我在用這個方法剛我並沒有加for ($r=0;$r<3;$r++)
    這個回圈~而是自已在$j的地方。例:($row[$j] == "4")
    自已打0 1 2 3……
    神奇是可以了耶~
    但只要我把回圈加上去了~反而$j++卻不會加~用永遠都是0
    難到for不能在while的外面嗎?有人跟我說什麼前測後測的~
    我聽某~
Sign In or Register to comment.