我将一个数组传递给一个函数,并期望该函数在其中存储值。这是我的代码
功能 -
function GetDetailsById ($iStudentId, $aDetailsId)
{
/* SQL */
while ($row = mysql_fetch_array($result))
{
array_push($aDetailsId, $row[0]);
}
}
用法 -
$aDetailsId = array();
$oDetailsTable->GetDetailsById("1", $aDetailsId)
当我尝试
时print_r($aDetailsId)
数组没有显示任何内容。我是以正确的方式做到的吗?
答案 0 :(得分:2)
您的数组需要通过引用函数传递;这意味着应该以这种方式定义函数:
function GetDetailsById ($iStudentId, & $aDetailsId)
{
// ...
}
有关更多信息,请参阅Making arguments be passed by reference
或者你可以使用你的函数return its result - 这可能是更好的主意(查看调用函数的代码,你立即知道它的作用):
function GetDetailsById ($iStudentId)
{
$result = array();
// TODO here, fill $result with your data
return $result;
}
并调用函数:
$aDetailsId = $oDetailsTable->GetDetailsById("1");
答案 1 :(得分:1)
这是因为默认情况下参数按值传递,这意味着只有变量的值传递给函数,而不是变量本身。无论你对函数内部的值做什么都不会影响函数外部的原始值。
两个选项:
return
来自函数的修改后的值。Pass the parameter by reference:
function GetDetailsById ($iStudentId, &$aDetailsId) ...
答案 2 :(得分:0)
首先计算/检查您的resutl
是否包含任何结果集。并尝试使用'&'在数组的参数
function GetDetailsById ($iStudentId, &$aDetailsId)
答案 3 :(得分:0)
请将功能声明更改为,
function GetDetailsById ($iStudentId, &$aDetailsId)
array_push
电话中还有一个错误。将其更改为,
array_push($aDetailsId, $row[0]);