PHP:if语句在foreach中不起作用

时间:2017-01-11 04:07:29

标签: php arrays foreach

我有两个数组。一个包含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>

1 个答案:

答案 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'];
            }
        }
    }
 ?>