我有一个自定义对象的数组,我想找到具有匹配属性值的对象。
这是我的目标.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_nr
和$time
值的对象。例如:
如果我的数组上的两个对象 X 和 Y 都有$field_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!';
}
}
}
但是,我的解决方案是为每个匹配打印两次"匹配!"。有没有更好的方法在我的对象数组中找到这些匹配项?
马库斯
这是因为您没有存储您检查的内容,并且每次都遍历整个数组。例如,如果您有对象 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++;
}