【问题标题】:PHP: if statement not working inside foreachPHP:if 语句在 foreach 中不起作用
【发布时间】: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-&gt;getOccupation()没有输出?
  • 是的。 $person->getName(), $person->getOc​​cupation(),分别返回人的姓名和职位。所以这些 getter 函数工作正常。还 echo $name 正确打印此人的姓名。但是当比较时,它并没有进入 if 语句中......
  • $person->getOc​​cupation() 是空的,它不会进入 if 语句。我尝试了else语句检查,一切都进入了else部分。
  • 你的类构造函数中一定有一些错误,你能告诉我们你的代码省略部分吗?

标签: php arrays foreach


【解决方案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'];
            }
        }
    }
 ?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 2018-11-19
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    • 2020-11-01
    • 2013-08-10
    相关资源
    最近更新 更多