首页 > 解决方案 > 如何使用 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); 
    }
}

标签: php

解决方案


您可以重写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); 

ifandelse子句的末尾,您可以将它移到if块之后。


推荐阅读