关联数组 PHP,从已知数据开始获取数据


Associative array PHP, getting data starting from a known data

这可能很简单,但是我在尝试解决这个问题时遇到了一点灾难。我在 PHP 中有一个关联数组,如下所示:

$people= array (["Name" => "Sandra", "Age" => "21"], ["Name" => "Frank", "Age" => "34"], ["Name" => "Marc", "Age" => "56"]);

现在,如果我想知道数组中两个已知元素的年龄,比如说桑德拉和弗兰克。我试着这样做:

foreach($people as $i){
    foreach($i as $info => $v){
        if($info == "Name"){
            if($v == "Sandra" || $v == "Frank"){
                    echo $v." has ". $v;            
            }
        }
    }
}

结果是:桑德拉有了桑德拉。但这当然不是应该打印的内容。有人可以让我理解这个简单的问题吗?

为什么 2 个 foreach 循环,你可以通过一个 foreach 循环来实现它:

$people = array(["Name" => "Sandra", "Age" => "21"], ["Name" => "Frank", "Age" => "34"], ["Name" => "Marc", "Age" => "56"]);
foreach ($people as $v) {

    if ($v["Name"] == "Sandra" || $v["Name"] == "Frank") {
        echo $v["Name"] . " has " . $v["Age"];
        echo "<br />";
    }
}

输出:

Sandra has 21
Frank has 34

首先,你使用了在 PHP 中使用数组的两种约定。它有时会变得不清楚,因此仅使用一种约定,例如:

$people= [["Name" => "Sandra", "Age" => "21"], ["Name" => "Frank", "Age" => "34"], ["Name" => "Marc", "Age" => "56"]]

$people= array(array("Name" => "Sandra", "Age" => "21"), array("Name" => "Frank", "Age" => "34"), array("Name" => "Marc", "Age" => "56"))

并且有针对您的问题的解决方案:

foreach($people as $person)
    if($person['Name'] == "Sandra" || $person['Name'] == "Frank")
        echo $person['Name'] . ' has ' . $person['Age'];

试试这个:

$flag = false;
foreach($people as $i){
    foreach($i as $info => $v){
        if($info == "Name"){
            if($v == "Sandra" || $v == "Frank"){
                echo $v." has "; 
                $flag = true;
            }
            else
                $flag = false;
        }
        if($info == "Age" && $flag){
            echo $v;          
        }
    }
}