2016-11-26 14 views
-1

値が異なる配列に計算された後に値をプッシュしようとしています min($arrival)がwhileループに入った後に設定解除されていることがわかるため、最初の3つの到着に対してすべて正常に動作しますが、 ("4")に達し、($minCCが> 1ではないため)else文にはなりません。
if文またはwhileループに何か問題があるかどうかわかりませんが、何が間違っているかを理解するのに役立つ必要があります。私はあなたが非常に慎重にコードレビュー、しかし、私はすでに参照すると、あなたは解除($ハッシュ[i])とすることを信じているようにそれはそうでなかったdo whileループがうまく動作しない

$alpha = ["A","B","C","D"]; 
$arrival = ["1","1","1","4"]; 
$cpu = ["10","2","2","4"]; 
$final = array(); //start + finish 
$inCC = array(); //final cc of inline related to falp 
$outCC = array(); //final cc of inline2 
$falp = array(); // final a 
$start = 0; 

$tempc = array(); // => temp for leftc 
$tempa = array(); // => temp for lefta 

$leftc = array(); // =>merge inCC & outCC 
$lefta = array(); // =>merge falp 

$hashed = mysql_query("SELECT Alpha FROM fcfs", $connection); 
while($row = mysql_fetch_assoc($hashed)){ 
    $hash[] = $row['Alpha']; 
} 
/////test 
do{ 
$min = min($arrival); 
$findmin = mysql_query("SELECT Alpha,CPU FROM fcfs WHERE Arrival='$min'", $connection); 
while($fm = mysql_fetch_assoc($findmin)){ 
    $ALPHA[] = $fm['Alpha']; 
    $minCC[] = $fm['CPU']; 
} 

/*while(count($minCC) > 0){*/ 
$keys = array_keys($arrival, $min); 
    foreach($keys as $k) 
    { 
     unset($arrival[$k]); 
    } 
$min2 = min($arrival); 
$diff = $min2 - $min; 

    if(count($minCC) > 1){ /// else fasfas el min of mincc 
     for($i=0; $i<$diff; $i++){ 
      if($minCC[$i] == 1){ 
       array_push($inCC, $minCC[$i]); 
       array_push($falp, $ALPHA[$i]); 
       unset($minCC[$i]); 
       unset($ALPHA[$i]); 
       unset($hash[$i]); 
      }else{ 
       array_push($inCC, 1); 
       array_push($tempc, ($minCC[$i] - 1)); 
       array_push($tempa, $ALPHA[$i]); 
       unset($minCC[$i]); 
       unset($ALPHA[$i]); 
       unset($hash[$i]); 
      } 
     } 
    }else{ 
     array_push($inCC, $minCC[0]); 
     array_push($falp, $ALPHA[0]); 
     unset($minCC[0]); 
     unset($ALPHA[0]); 
     unset($hash[0]); 
    } 
}while(count($hash) > 0); <=== think this goes infinite and page stop working 


/* testing each array */ 
print_r($hash); 
echo '<br>'; 
print_r($tempc); 
echo '<br>'; 
print_r($tempa); 
echo '<br>'; 
print_r($inCC); 
+0

コード行のインデントを修正してください。それはあなたが論理、構造を理解するのに役立ちます。私は自分であなたのコードを見ればそれを得ることができません... – arkascha

答えて

0

は、要素を、残りの数字キーをシフト。だから悪い知らせはない。

見て、あなたはこのような配列を持っており、行った場合、そのような設定を解除

$a = array(10, 20, 30); 
unset($a[1]); 

その後、

echo count($a); // returns 2 
echo $a[0]; // 10 
echo $a[1]; // undefined 
echo $a[2]; // 30 

期待ような建設wount工事クリーン配列...それはさえ創傷エンド

while(count($a)) 
    unset($a[0]); // delete $a[0] if exists, or delete nothing if array doesnt have $a[0], even if it has $a[1]; 

あなたはコードがより複雑ですが、私は同じ誤った仮定に基づいて推測します。あなたはこの問題を解決するには、このアレイ上の各設定を解除した後

$hash = array_values($hash); 

とインデックスギャップを埋めることができ

更新

+0

それについても、それについては、array_values($ハッシュ);完璧に働いた。 と( "4")が右の配列に入っています... $ arrival [$ k]はどのように動作しますか? array_valuesはそこにないので、$ diffはどのように値を得ていますか? $ min = 4、$ min2 = ??と実行され続けました( "4")。 <==は未定義ですか? –

関連する問題