PHP 变量不会在函数外改变
PHP variables not changing outside of function
我在 PHP 中有一个函数。我将两个数组作为引用传递给函数。当函数在函数外部更新 $array2
时,它不会更新 $array
。下面是我的函数。
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 没有更改。
尝试将 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>';
}
$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
我在 PHP 中有一个函数。我将两个数组作为引用传递给函数。当函数在函数外部更新 $array2
时,它不会更新 $array
。下面是我的函数。
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 没有更改。
尝试将 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>';
}
$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