PHP在对象数组中查找匹配的属性值

PHP在对象数组中查找匹配的属性值,php,arrays,Php,Arrays,我有一个自定义对象数组,我想找到具有匹配属性值的对象 这是my object.php: class game_list { var $team_name; var $field_nr; var $time; /** * @return mixed */ public function getTeamName() { return $this->team_name; } /**

我有一个自定义对象数组,我想找到具有匹配属性值的对象

这是my object.php:

class game_list
{
    var $team_name;
    var $field_nr;
    var $time;

    /**
     * @return mixed
     */
    public function getTeamName()
    {
        return $this->team_name;
    }

    /**
     * @param mixed $team_name
     */
    public function setTeamName($team_name)
    {
        $this->team_name = $team_name;
    }

    /**
     * @return mixed
     */
    public function getFieldNr()
    {
        return $this->field_nr;
    }

    /**
     * @param mixed $field_nr
     */
    public function setFieldNr($field_nr)
    {
        $this->field_nr = $field_nr;
    }

    /**
     * @return mixed
     */
    public function getTime()
    {
        return $this->time;
    }

    /**
     * @param mixed $time
     */
    public function setTime($time)
    {
        $this->time = $time;
    }
}
我有一个数组,其中有x个对象。我想查找具有相同
$field\u nr
$time
值的对象。例如:

如果数组中的两个对象X和Y都有
$field\u nr=1
$time=“12:00”
我想打印“匹配!”

这就是我目前正在做的:

//getPlaySchedule returns my array($feedback) of objects
$feedback= getPlaySchedule($cup_name, $cup_year, $division);

for($x=0; $x<count($feedback); $x++){
    $time = $feedback[$x]->getTime();
    $field = $feedback[$x]->getFieldNr();
    $team = $feedback[$x]->getTeamName();

    for($y=0; $y<count($feedback); $y++){
        if($time == $feedback[$y]->getTime() && $field == $feedback[$y]->getFieldNr() && $team != $feedback[$y]->getTeamName()){

            echo 'Match!';
        }
    }
}
//getPlaySchedule返回我的对象数组($feedback)
$feedback=getPlaySchedule($cup\u name,$cup\u year,$division);
对于($x=0;$xgetTime();
$field=$feedback[$x]->getFieldNr();
$team=$feedback[$x]->getTeamName();
对于($y=0;$ygetTime()&&&$field==$feedback[$y]->getFieldNr()&&&$team!=$feedback[$y]->getTeamName()){
回声“匹配!”;
}
}
}
但是,我的解决方案会为每个匹配打印两次“匹配!”。是否有更好的方法在我的对象数组中查找这些匹配


Marcus

这是因为你没有存储你检查过的内容,每次都会在整个数组中循环。例如,如果你有对象A、B、C、D、E、F,首先检查A。比方说,A将匹配D。当你检查D时,D将匹配A

因此,您需要将其存储到数组中,或插入指针、已检查的对象以及签入D时跳过a、B、C

一个可能的解决方案是,如果在我的示例中设置一个计数器,
$z
,然后从该计数器开始第二个循环。这将防止脚本再次检查您已检查的内容。代码未测试

$z = 0;
for ($x = 0; $x < count($my_array); $x++) {
    $time = $feedback[$x]->getTime();
    $field = $feedback[$x]->getFieldNr();
    $team = $feedback[$x]->getTeamName();
    for ($y = $z; $y < count($my_array); $y++) {
        if ($time == $feedback[$y]->getTime() && $field == $feedback[$y]->getFieldNr() && $team != $feedback[$y]->getTeamName()) {
            echo 'Match!';
        }
    }
    $z++;
}
$z=0;
对于($x=0;$xgetTime();
$field=$feedback[$x]->getFieldNr();
$team=$feedback[$x]->getTeamName();
对于($y=$z;$ygetTime()&&&$field==$feedback[$y]->getFieldNr()&&&$team!=$feedback[$y]->getTeamName()){
回声“匹配!”;
}
}
$z++;
}