我有两个数组。一个包含json格式的对象,每个对象有2个变量,所以像array(3){[“John”] => string(2)“20”[“Mary”] => string(2)“18”[“保罗 “] =>串(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>
答案 0 :(得分:1)
试试这个......
<?php
$person=array(array('name'=>'aa','occupation'=>'xx'),array('name'=>'bb','occupation'=>'yy'),array('name'=>'cc','occupation'=>'zz')); //this is your array people
//print_r($person);
$name ='cc';//assume
foreach($person as $k=>$v)
{
if($v['name'] == $name)
{
echo $v['occupation'];//outputs zz which is occupation of cc matched with $name
}
}
?>
不需要进行函数调用。因为值已经在数组中......就像这样......
<?php
foreach($_GET as $name => $age){
echo $name;
foreach($people as $person=>$value){
if($value['name'] == $name)
{
echo $value['occupation'];
}
}
}
?>