2015-09-29 29 views
1

我去過幾個小時試圖在陣列中分配的價值,但每次迭代的陣列設置爲0,我不明白爲什麼,這裏的代碼...如何從循環內的if語句更改數組值?

$AurQ = array(); 
$prod = ''; 
while ($NOTIFY = $notification->fetch_assoc()) { 
    print_r($AurQ); 
    if ($NOTIFY['notification_type_ID'] == 1) { 
     if (in_array($NOTIFY['qID'], $AurQ, true)) { 
      echo "exist"; 
      continue; 
     } else { 
      $AurQ[] = $NOTIFY['qID']; // Adding the value to the array 
      $prod .= '<li><a href="http://localhost/website/link/' . $NOTIFY['qID'] . '"> <span class="AskIcon"></span><span class="noti_announce">'; 
      $prod .= '<span class="unB">' . $NOTIFY['first_name'] . ' ' . $NOTIFY['last_name'] . '</span> ' . $NOTIFY['notify_name_en'] . ' "' . $NOTIFY['q_title'] . '"</span>'; 
      $prod .= '<span class="noti_time"><span class="icon"></span>' . time_elapsed_string($NOTIFY['time']) . '</span></a></li>'; 
     } // end of if doesn't exist in Array List 
    } //end of if 
} // end of loop 
+1

'var_dump($ NOTIFY)'並檢查它是什麼。 –

+0

@ b0s3不能正常工作,問題是數組不是從if語句裏面分配的, – user1294027

+0

'in_array($ NOTIFY ['qID']] ,$ AurQ,true)'總是'false'。 –

回答

0

這個問題似乎是隻有在檢查數組中是否存在之後,纔會向數組推送一個值,它並沒有給出您將它初始化爲剛剛位於其上方的空數組。

所以,這裏有一個邏輯錯誤,而這取決於你想要做什麼,它可以通過移動$AurQ[] = $NOTIFY['qID'] ;行成else語句是固定的,或者改變您的if語句從if (in_array($NOTIFY['qID'], $AurQ, true)) {if (!in_array($NOTIFY['qID'], $AurQ, true)) {

由於您沒有提到當您不想要它們時顯示的問題,我會假設您正在尋找前者的解決方案而不是後者。所以,你的代碼會倒閉看起來像這樣:

$AurQ = array(); 
$prod =''; 
while($NOTIFY = $notification->fetch_assoc()) { 
if ($NOTIFY['notification_type_ID'] == 1) { 
    if (in_array($NOTIFY['qID'], $AurQ, true)){ //If it's ALREADY in the array 
     echo "exist"; 
     continue; 
    } else { //Otherwise we need to add it, and display it 
     $AurQ[] = $NOTIFY['qID'] ; // Adding the value to the array 
     $prod .= '<li><a href="http://localhost/website/link/'.$NOTIFY['qID'].'"> <span class="AskIcon"></span><span class="noti_announce">'; 
     $prod .= '<span class="unB">'.$NOTIFY['first_name'].' '.$NOTIFY['last_name'].'</span> '.$NOTIFY['notify_name_en'].' "'.$NOTIFY['q_title'].'"</span>'; 
     $prod .= '<span class="noti_time"><span class="icon"></span>'.time_elapsed_string($NOTIFY['time']).'</span></a></li>'; 
    }// end of if doesn't exist in Array List 

}//end of if 
} // end of loop 
+0

是啊,我明白這一點,但沒有邏輯錯誤,發生了什麼是如果數組是空的,一些數據將出現,我將分配一個id在數組中,while循環如果存在相同的id它將退出此迭代 – user1294027

+0

正確但如果它已經存在,你只能將它添加到數組中:它永遠不會以這種方式添加。如果您將'$ AurQ [] = $ NOTIFY ['qID'];'行移動到else語句中,它應該像您期望的那樣工作,因爲代碼現在將其添加到數組中。 –

+0

我試過這個 它仍然迴盪空陣列表 – user1294027

0

鑑於你的代碼,你只需要移動$AurQ[] = $NOTIFY['qID'];到別的塊。

目前,$AurQ[]是空的,如果塊永遠不會運行,因爲in_array($NOTIFY['qID'], $AurQ, true)將始終返回false。