2013-01-22 390 views
0

我很確定你可以在while循環中放置一個while循環,就像我之前做過的一樣,但是我似乎在這裏遇到了一個問題。由於這是非常複雜的,生病發布我的代碼然後解釋它。while while while循環while循環

PHP:

//post vars 
$port=$_POST['ports']; 
$super=$_POST['super']; 
$col=$_POST['columns']; 
$row=$_POST['rows']; 
//rest of vars 
$half_col=$col/$super; 
$halfer_col=$col/$super; 
$i=1; 
$count=1; 
$and=1; 
$one=1; 
$sector=array(); 
$dat_array=array(); 

echo $port."<br>"; 

echo $super."<br>"; 

echo $col."<br>"; 

echo $row."<br><br><br><br>"; 
echo "<h1>here goes nothen</h1><br><br>"; 

while($count<$port){ 
    while($i<=$half_col){ 
     $dat_array[]=$halfer_col; 
     $i+=$and; 
     $halfer_col-=$and; 
     echo "<br>halfer_col:".$halfer_col."<br>"; 
    } 
print_r($dat_array); 
$sector[]=implode(',',$dat_array); 
$count+=$half_col; 
$halfer_col+=$half_col; 
} 

echo "<br><br>ANNNNNNND...<br><br>"; 
print_r($sector); 

現在,這是與用戶輸入端口:24個超:2欄:12行:2 結果:

24 
2 
12 
2 

here goes nothen 

halfer_col:5 

halfer_col:4 

halfer_col:3 

halfer_col:2 

halfer_col:1 

halfer_col:0 
Array ([0] => 6 [1] => 5 [2] => 4 [3] => 3 [4] => 2 [5] => 1) Array ([0] => 6 [1] => 5 [2] => 4 [3] => 3 [4] => 2 [5] => 1) Array ([0] => 6 [1] => 5 [2] => 4 [3] => 3 [4] => 2 [5] => 1) Array ([0] => 6 [1] => 5 [2] => 4 [3] => 3 [4] => 2 [5] => 1) 

ANNNNNNND... 

Array ([0] => 6,5,4,3,2,1 [1] => 6,5,4,3,2,1 [2] => 6,5,4,3,2,1 [3] => 6,5,4,3,2,1) 

基本上,它需要用戶輸入,根據「,」將其分解爲探測器順序。但從我可以告訴,它不是在這裏添加:$halfer_col+=$half_col;這是導致數據不增加,任何想法任何人?或者甚至解釋爲什麼這不會添加和影響我的內部while循環的方式,它被設置。

到底最終陣列應該像這樣:

Array ([0] => 6,5,4,3,2,1 [1] => 12,11,10,9,8,7 [2] => 18,17,16,15,14,13 [3] => 24,23,22,21,20,19) 
+1

你想要什麼輸出? (可能有另一種方法) – h2ooooooo

+1

也許你打算每次都重新啓動內部循環,每次都是$ i = 1?就像現在這樣,在外循環第一次運行期間,$ i只是小於$ half_col。 –

+0

@ h2ooooooo我添加了最後的打印數組應該看起來像 – Nick

回答

1

你可以更改您的代碼如下:

$port = (int)$_POST['ports']; 
$super = (int)$_POST['super']; 
$col = (int)$_POST['columns']; 
$row = (int)$_POST['rows']; 

$colHalf = $col/$super; 

$finalArray = array(); 
for ($i = $port; $i >= 1; $i -= $colHalf) { 
    $tempArray = array(); 
    for ($j = 0; $j < $colHalf; $j++) { 
     $tempArray[] = $i - $j; 
    } 
    $finalArray[] = implode(",", $tempArray); 
} 
$finalArray = array_reverse($finalArray); 

echo "<pre>" . print_r($finalArray, true) . "</pre>"; 

這將打印你想要什麼(端口= 24,超級= 2,COL = 12,列= 2):

Array 
(
    [0] => 6,5,4,3,2,1 
    [1] => 12,11,10,9,8,7 
    [2] => 18,17,16,15,14,13 
    [3] => 24,23,22,21,20,19 
) 
+0

非常感謝!你有沒有可能說出我的錯在哪裏? – Nick

0

你可以嘗試製作外,同時一個for循環。

for(; $count<$port; $count+=$half_col){ 
    while($i<=$half_col){ 
     $dat_array[]=$halfer_col; 
     $i+=$and; 
     $halfer_col-=$and; 
     echo "<br>halfer_col:".$halfer_col."<br>"; 
    } 
print_r($dat_array); 
$sector[]=implode(',',$dat_array); 
$halfer_col+=$half_col; 
} 
+0

我沉迷於for循環的想法,但我無法想象它的工作方式。我只是這樣試了,輸出也一樣^ – Nick