2016-02-22 121 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