如果关联值不在数组中,PHP如何返回一定的结果


PHP how to echo certain result if associative value is not in array?

$array = [
    "123" => ["name" => "Tom", "age" => "15"],
    "456" => ["name" => "Dick", "age" => "16"],
    "789" => ["name" => "Harry", "age" => "17"]
];

我有一个HTML表单,要求您输入一个3位数的数字,它存储为$number通过$_POST,如果它存在于数组中,它会回显出的数字是在数组中,如果它不存在,它会回显失败。我可以设法回显数组中现有的数字,但不失败,我怎么去做这个?我使用foreach循环,并在foreach循环中使用if语句。

<?php
foreach($array as $key => $value){
    if($number == $key){
        echo $key;
    }
}
?>

这样,如果我输入123、456或789,它将相应地回显。但是现在,如果我在数组中输入不存在的东西,比如999,我想让它回显失败。是的,我知道我可以直接输入

else{
    echo"Fail";
}

但由于某种原因,输出将是FailFailFail,我认为这是由于foreach循环。任何想法?更不用说,仅仅通过添加else语句,在用户第一次尝试输入数字之前,FailFailFail就已经回显出来了。

您根本不需要迭代foreach()—您可以像这样替换整个块,只需检查相应的键是否存在:

if (isset($array[$number])) {
    echo 'success';
} else {
    echo 'fail';
}

只需添加一个"else"语句

else {
   echo "Failed";
}

它写FailFailFail,因为您正在循环整个数组并测试所有键-这是不必要的。试试这个:

$number = $_POST['number']; // or wherefrom you take the value from form
 $array = [
    "123" => ["name" => "Tom", "age" => "15"],
    "456" => ["name" => "Dick", "age" => "16"],
    "789" => ["name" => "Harry", "age" => "17"]
];
if (isset($array[$number])) {
    echo $number;
    // or var_dump($array[$number]);
} else {
    echo 'fail';
}

添加一个Flag

 <?php
        $flag = 0;
        foreach($array as $key => $value)
        {
           if($number == $key)
           {
              echo $key;
              $flag = 1;
           }
        }
        if($flag == 0)
        {
            echo "fail";
        }
    ?> 

这就行了。:)