2013-01-22 3 views
0

Je suis assez sûr que vous pouvez mettre une boucle while à l'intérieur d'une boucle while, comme je l'ai déjà fait, mais il semble que je rencontre un problème ici. Comme c'est assez complexe, mauvais poster mon code puis l'expliquer.while boucle à l'intérieur d'une boucle 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); 

Maintenant, c'est avec le port d'entrée utilisateur: 24 super: 2 col: 12 rangée: 2 Résultat:

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) 

essentiellement, il faut l'entrée d'utilisateur, le décompose et l'implose dans l'ordre prober basé sur un ",". cependant de ce que je peux dire, il n'est pas en ajoutant ici: $halfer_col+=$half_col; et qui provoque les données à ne pas incrémenter, des idées n'importe qui? Ou même une explication de pourquoi cela n'ajoutera pas et n'affectera pas ma boucle interne de la façon dont elle est définie.

à la fin du tableau final devrait ressembler à ceci:

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

Quelle sortie voulez-vous? (il pourrait y avoir une autre façon de le faire) – h2ooooooo

+1

Peut-être que vous vouliez redémarrer la boucle interne avec $ i = 1 à chaque fois? Comme il est maintenant, $ i est seulement inférieur à $ half_col lors de la première exécution de la boucle externe. –

+0

@ h2ooooooo J'ai ajouté ce à quoi devrait ressembler le tableau d'impression final – Nick

Répondre

1

Vous pouvez changer votre code à ce qui suit:

$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>"; 

Ce imprimera ce que vous voulez (port = 24, super = 2, col = 12, rang = 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

A travaillé super merci! Étiez-vous par hasard capable de dire ce qui ne va pas avec le mien? – Nick

0

Vous pouvez essayer de faire l'extérieur en une boucle.

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

J'ai réfléchi à l'idée d'une boucle for mais je ne pouvais pas penser à un moyen pour que cela fonctionne. Je viens de l'essayer de cette façon et la sortie était la même^ – Nick