php - 如何使用 PHP 编辑对象数组中的对象属性?
问题描述
在下面的代码中,我创建了一个对象实例 $T,为其赋予属性值,并将其添加到我的名为 $teacherObjArray 的对象数组中。但是,我遇到的问题是对象实例是否已经存在(由teacherExists() 函数检查)......程序如何知道我正在访问哪个 $T 对象?换句话说,我如何将它编程到它在对象数组中更新正确的位置?我对正确的定义是 $teacherName 与对象属性 LName 相同。我很感激帮助:)
function teacherExists($teacherObjArray, $teacherName) {
foreach ($teacherObjArray as $Teacher) {
if ($Teacher->LName == $teacherName) return true; //can i return index here?
}
return false;
}
while(sizeOf($r) > 0)
{
if (!teacherExists($teacherObjArray, $teacherName)) {
$T = new Teacher($teachernName, $teacherMaxLoad, $classPeriod);
$T->LName = $teacherName;
$T->MaxLoad = $teacherMaxLoad;
$T->addPeriod($classPeriod);
array_push($teacherObjArray, $T);
//create course object
$C = new Course($courseNumber, $courseName, $teacherName, $classPeriod);
$C->CourseNumber=$courseNumber;
$C->CourseName=$courseName;
$C->CourseTeacher=$teacherName;
$C->CoursePeriod=$classPeriod;
maintenance($r, $teacherName, $classPeriod, $cn);
}
//updates already existing object in array of objects
elseif (teacherExists($teacherObjArray, $teacherName))
{
//get teacher object where its LName property is equal to $teacherName
$T->addPeriod($classPeriod);
maintenance($r, $teacherName, $classPeriod, $cn);
}
}
解决方案
您可以重写teacherExists
以返回找到值的索引,或者false
在未找到时返回:
function teacherExists($teacherObjArray, $teacherName) {
foreach ($teacherObjArray as $key => $Teacher) {
if ($Teacher->LName == $teacherName) return $key;
}
return false;
}
然后您可以重写您的if
子句以检查返回值是否为false
:
if (($key = teacherExists($teacherObjArray, $teacherName)) === false) {
你的elseif
条款就变成了:
else
{
//get teacher object where its LName property is equal to $teacherName
$T = $teacherObjArray[$key];
$T->addPeriod($classPeriod);
maintenance($r, $teacherName, $classPeriod, $cn);
}
请注意,由于您致电
maintenance($r, $teacherName, $classPeriod, $cn);
在if
andelse
子句的末尾,您可以将它移到if
块之后。
推荐阅读
- php - 向 Laravel 工厂方法添加多个关系会导致 TypeError
- javascript - 如何使用javascript替换其他指定单词中的拉丁语指定单词?
- excel - 移动到下一个空行以从 Userform 填充单元格
- .net - 如何使用 Math.Net Numerics 计算正态分布的 Z 临界值?
- android - 如何在 c4droid 中使用 sd2 primitivies 和 sdl2_gfx
- ios - UIStackView 与 superview 的宽度成比例
- python - 如何将由空格分隔的整数(像素)组成的字符串列转换为大约 28000 行的数据帧
- c# - 将多行从form1中的gridview传递到form2并等待按钮单击
- c# - 使用 kernel.dll 获取进程 mdoules c#
- codenameone - CN1 项目未在 Windows10 上显示构建提示和移动属性