2016-02-22 118 views
1

我有一個PHP函數。我將兩個數組作爲參考傳遞給函數。功能更新$array2功能外,它不更新$array。以下是我的功能。PHP變量不能改變功能

function JobAssign($i,&$array,&$array2,$Machine_Interchange) { 
    $compmachine = $array[$i]['Machine_Name']; 
    $CLT = $array[$i]["Estimated_Start_Date"]; 
    $ET = $array[$i]["Estimated_Completion_Date"]; 

    $Machine = $array[$i]['Machine_Name']; 
    $Compatibility_sql = "SELECT Machine2 FROM Machine_Interchange where Machine1 = '$Machine' and Value = 1"; 
    $compatibility_query = mysql_query($Compatibility_sql) or die(mysql_error()); 
    for($i=0; $compatibility[$i] = mysql_fetch_assoc($compatibility_query);$i++); 
    array_pop($compatibility); 
    $maxkey = max(array_keys($compatibility)); 
    $maxnumber = max(array_keys($array2))+1; 
    $k=0; 
    do{ 
     $compmachine = $compatibility[$k]['Machine2']; 
     $CLT = $array2[$compmachine]; 
     if($array2[$compatibility[$k]['Machine2']]>$array2[$compatibility[$k+1]['Machine2']]) { 
      $compmachine = $compatibility[$k+1]['Machine2']; 
      $CLT = $array2[$compatibility[$k+1]['Machine2']];           
     } 
     $k=$k+1;  
    } 

    while($k<$maxkey);             
    $array[$i]["Machine_Name"] = $compmachine; 
    $array[$i]["Estimated_Start_Date"] = $CLT;      
    $prodhours = $array[$i]["Prod_Hrs"]; 
    $array[$i]["Estimated_Completion_Date"] = date('Y-m-d H:i:s', strtotime($CLT . " +$prodhours hour")); 
    $array2[$compmachine] = $array[$i]["Estimated_Completion_Date"]; 

    echo $array[$i]['Machine_Name'].'<br>'; 
    echo $array[$i]['Estimated_Start_Date'].'<br>'; 
    echo $array[$i]['Estimated_Completion_Date'].'<br>'; 
    echo $array2[$compmachine].'<br>'; 
} 

JobAssign(0,$Jobs_Data,$LT,$Machine_Interchange); 

echo $Jobs_Data[0]['Machine_Name'].'<br>'; 
echo $Jobs_Data[0]['Estimated_Start_Date'].'<br>'; 
echo $Jobs_Data[0]['Estimated_Completion_Date'].'<br>'; 
echo $LT['Machine 3']; 

下面是我get.The前4行的輸出是從功能和接下來的4內的是從功能以外的輸出。

Machine 3 
2014-07-12 00:00:00 
2014-07-15 11:00:00 
2014-07-15 11:00:00 
Machine 1 
2014-07-30 00:00:00 
2014-08-02 00:00:00 
2014-07-15 11:00:00 

當我回聲函數內部的變更後的變量他們根本改變,但是當我回聲$array外設功能的它不會爲$array改變數值。即使我已經在函數參數中傳遞了兩個數組作爲參考,但只有$array2的值已更改。這意味着第4行和第8行在輸出中相同,這意味着$ array2的值已更改,但不是$ array。

+0

你在哪裏調用'JobAssign'功能? –

+0

我在定義函數併爲$ array和$ array2傳遞2個不同的數組之後調用該函數。 – MaverickPablo

+0

請將您的問題添加到您的問題,以便它也可以檢查。 –

回答

0

嘗試將for循環中的變量$ i更改爲另一個變量。因爲它在循環時更改變量的值。

function JobAssign($i,&$array,&$array2,$Machine_Interchange) 
{ 

$compmachine = $array[$i]['Machine_Name']; 
$CLT = $array[$i]["Estimated_Start_Date"]; 
$ET = $array[$i]["Estimated_Completion_Date"]; 

$Machine = $array[$i]['Machine_Name']; 
     $Compatibility_sql = "SELECT Machine2 FROM Machine_Interchange where Machine1 = '$Machine' and Value = 1"; 
        $compatibility_query = mysql_query($Compatibility_sql) or die(mysql_error()); 
        for($ii=0; $compatibility[$ii] = mysql_fetch_assoc($compatibility_query);$ii++); 
         array_pop($compatibility); 
          $maxkey = max(array_keys($compatibility)); 
          $maxnumber = max(array_keys($array2))+1; 
              $k=0; 
              do{ 
               $compmachine = $compatibility[$k]['Machine2']; 
               $CLT = $array2[$compmachine]; 
              if($array2[$compatibility[$k]['Machine2']]>$array2[$compatibility[$k+1]['Machine2']]) 
               { 
                $compmachine = $compatibility[$k+1]['Machine2'];       
                $CLT = $array2[$compatibility[$k+1]['Machine2']];                           
               } 
               $k=$k+1;  
               } 
              while($k<$maxkey);                            
$array[$i]["Machine_Name"] = $compmachine; 
$array[$i]["Estimated_Start_Date"] = $CLT;      
$prodhours = $array[$i]["Prod_Hrs"]; 
$array[$i]["Estimated_Completion_Date"] = date('Y-m-d H:i:s', strtotime($CLT . " +$prodhours hour"));        
$array2[$compmachine] = $array[$i]["Estimated_Completion_Date"]; 

echo $array[$i]['Machine_Name'].'<br>'; 
echo $array[$i]['Estimated_Start_Date'].'<br>'; 
echo $array[$i]['Estimated_Completion_Date'].'<br>'; 
echo $array2[$compmachine].'<br>'; 
} 
+0

調用時傳遞引用已被刪除,該行是$ array3 = $ this-> JobAssign($ i,&$ array,&$ array2,$ Machine_Interchange); – MaverickPablo

+0

@SujayMahale對不起,我在致電函數 –

+0

時提出'&'符號感謝您的幫助。它仍然不能這樣工作。除了我的整個計劃是使用'$ array'的每個數組鍵的函數。每次我將它用作一個鍵時,'$ array2'數組都會更新爲'$ array'中下一個鍵的下一次使用函數的輸入。但是,爲什麼當我在函數參數中將它作爲參考傳遞時,它不會更新$ array中的變量。 – MaverickPablo

0

$array被改變,因爲它應該,問題是在錯誤的指數變化。

說明:

你調用函數與$i = 0$i也被用在循環語句和退出不同的值循環。

這裏是行:

for($i=0; $compatibility[$i] = mysql_fetch_assoc($compatibility_query);$i++); 

後上述$i不再0(只要你有什麼要取)

這樣的$array您在函數內部回聲指數與$array的索引不同,您在函數外部回顯。

解決您的問題只是改變上述循環別的東西的變數,比方說$j

for($j=0; $compatibility[$j] = mysql_fetch_assoc($compatibility_query);$j++); 

以便不再影響$i

+0

這幫了很多。我的愚蠢錯誤。非常感謝。 :-) – MaverickPablo