【发布时间】:2017-01-11 04:07:28
【问题描述】:
我有两个数组。一个包含 json 格式的对象,每个对象有 2 个变量,例如 array(3){["John"]=>string(2)"20" ["Mary"]=>string(2)"18" ["Paul" ]=>字符串(2)“23”}。这显示了人们的姓名和年龄。这些年龄将在浏览器上的表单中输入,并使用 GET 请求发送到服务器。另一个数组包含姓名相同但年龄不相同的人的对象。每个对象都是从一个类创建的,并包含它们的名称和它们的工作。这个数组是这样创建的:
<?php
class Person{
private $name;
private $job;
}
/*constructor*/
public function __construct($name, $job){
$this->name = $name;
$this->job = $job;
}
/*getters*/
public function getName(){
return $this->name;
}
public function getOccupation(){
return $this->job;
}
$john = new Person("John", "Police Officer");
$mary = new Person("Mary", "Actress");
$paul = new Person("Paul", "Professor");
/* ... and more people */
/*the second array contains all these data*/
$people = array($john, $mary, $paul, /* more people */);
?>
如您所见,这些数组具有共同的名称变量。我想要做的是,在通过第一个数组的 foreach 中,检查第二个数组中是否出现相同的名称,如果出现,则检索该人的职位。假设这两个数组都比这大很多,并且数据的顺序不同。我不知道如何解决这个问题。首先,我尝试检查比较本身是否有效,但它不起作用,我无法弄清楚原因。
<?php
foreach($_GET as $name => $age){
echo $name;
foreach($people as $person){
if($person->getName() == $name){
echo $person->getOccupation();
}
}
}
?>
这不打印任何内容。谁能帮我这是怎么回事?提前谢谢!
编辑: 我实际上是在尝试在 HTML 标记中实现这一点。
<table>
<tr>
<th>Name</th>
<th>Occupation</th>
</tr>
<?php foreach($_GET as $name => $quantity): ?>
<tr>
<td><?php echo $name ?></td>
<?php foreach($people as $person): ?>
<?php if($person->getName() == $name): ?>
<td><?php echo $person->getOccupation(); ?></td>
<?php endif ?>
<?php endforeach ?>
</tr>
<?php endforeach ?>
</table>
【问题讨论】:
-
你检查过 $person->getName() 返回的内容吗?
-
是所有输出都是空的还是只是
$person->getOccupation()没有输出? -
是的。 $person->getName(), $person->getOccupation(),分别返回人的姓名和职位。所以这些 getter 函数工作正常。还 echo $name 正确打印此人的姓名。但是当比较时,它并没有进入 if 语句中......
-
$person->getOccupation() 是空的,它不会进入 if 语句。我尝试了else语句检查,一切都进入了else部分。
-
你的类构造函数中一定有一些错误,你能告诉我们你的代码省略部分吗?