Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果检查json数组值时条件失败_Php_Json_If Statement - Fatal编程技术网

Php 如果检查json数组值时条件失败

Php 如果检查json数组值时条件失败,php,json,if-statement,Php,Json,If Statement,我有一个简单的json数组。其中我有两个对象。现在我正在检查它的一些特定值,如果找到了,就做一些事情,如果没有找到,就做另一件事情。但我不知道为什么,如果条件运行两个块true和false两个块都被执行。请帮助 $jsonstring = '{"like":[{"username":"abc","password":"abc"},{"username":"def","password":"def"}]}'; $jsonarr = json_decode($jsonstring); $count

我有一个简单的json数组。其中我有两个对象。现在我正在检查它的一些特定值,如果找到了,就做一些事情,如果没有找到,就做另一件事情。但我不知道为什么,如果条件运行两个块true和false两个块都被执行。请帮助

$jsonstring = '{"like":[{"username":"abc","password":"abc"},{"username":"def","password":"def"}]}';
$jsonarr = json_decode($jsonstring);
$count = count($jsonarr->like);
for ($r = 0; $r < $count; $r++) 
{
    if ($jsonarr->like[$r]->username == 'abc' && $jsonarr->like[$r]->password == 'abc') 
    { 
         echo 'Match';
    }else
    {
        echo 'No Match';
    }
}
$jsonstring='{“like”:[{“username”:“abc”,“password”:“abc”},{“username”:“def”,“password”:“def”}]};
$jsonarr=json_decode($jsonstring);
$count=count($jsonarr->like);
对于($r=0;$r<$count;$r++)
{
如果($jsonarr->like[$r]->username=='abc'&&$jsonarr->like[$r]->password=='abc')
{ 
回声“匹配”;
}否则
{
回声“不匹配”;
}
}

它不像常规的if条件吗?

它显示两个块,因为您正在循环通过包含两个项的json数组。一个符合你的条件,另一个不符合。下面是一个更简单的版本,它不使用循环,只测试数组中的值。请注意json_解码中的“true”标志

<?php

$jsonstring = '{"like":[{"username":"abc","password":"abc"},{"username":"def","password":"def"}]}';
$jsonarr = json_decode($jsonstring, true);

$testArray = $jsonarr['like'];
$loginArray = array('username'=>'abc','password'=>'abc');

if (in_array($loginArray,$testArray)) {
    echo 'match found, do login';
} else {
    echo "no match, do something else";
}
?>

它显示了两个块,因为您正在循环通过包含两个项的json数组。一个符合你的条件,另一个不符合。下面是一个更简单的版本,它不使用循环,只测试数组中的值。请注意json_解码中的“true”标志

<?php

$jsonstring = '{"like":[{"username":"abc","password":"abc"},{"username":"def","password":"def"}]}';
$jsonarr = json_decode($jsonstring, true);

$testArray = $jsonarr['like'];
$loginArray = array('username'=>'abc','password'=>'abc');

if (in_array($loginArray,$testArray)) {
    echo 'match found, do login';
} else {
    echo "no match, do something else";
}
?>



如果($jsonarr->like[$r]->username=='abc')&($jsonarr->like[$r]->password=='abc'))
可能发生这种情况。两个块都是在同一个循环中执行的,或者是在整个循环周期中执行的?您是在循环sonoo中执行此操作的。。它给出了相同的结果..:(你有两个输入,应该回显两行。你是说回显了4行吗?
if(($jsonarr->like[$r]->username=='abc')&($jsonarr->like[$r]->password=='abc'))
可能发生这种情况。两个块都是在同一个循环中执行的,或者是在整个循环周期中执行的?您在循环中执行此操作sonoo..它会给出相同的结果..:(你有两个输入,应该回显两行。你是说回显了4行吗?对我来说你太快了。^这也是我的想法。好的..我明白了,,,我想这是像登录系统一样检查…如果在数组中找到记录,请登录,否则登录失败..类似这样的。但这完全是另一种方式..如何我可以检查json数组中是否存在记录吗?Suraj,您正在使用的循环将用于此操作。您只需将登录方法放在条件的“匹配”部分(“如果”),而不在条件的“不匹配”部分(“其他”)执行任何操作。你真的不需要条件中的
else
部分,因为它不会起任何作用。你只需要使用
if
。然后它会在数组中循环,并在找到匹配项时运行“if”中的任何方法。thnxx..但我刚刚告诉过你登录方法的例子..我只需要--if记录存在做一件事,比如调用一个函数&如果找不到匹配项,调用另一个函数。@RobertWadeOK Suraj,我想我现在更明白你的意思了。我用在_array()中使用的另一段代码修改了上面的答案测试你的登录信息是否在该数组中。你对我来说太快了。^这也是我的想法。好的..我明白了,,,我认为这是像登录系统一样检查…如果在数组中找到记录,则登录失败..类似于这样。但这完全是另一种方式..我如何检查json数组中是否存在记录y?Suraj,您正在使用的循环将适用于此。您只需将登录方法放在条件的“匹配”部分(“如果”),而不在条件的“不匹配”部分(“其他”)中执行任何操作。你真的不需要条件中的
else
部分,因为它不会起任何作用。你只需要使用
if
。然后它会在数组中循环,并在找到匹配项时运行“if”中的任何方法。thnxx..但我刚刚告诉过你登录方法的例子..我只需要--if记录存在做一件事,比如调用一个函数&如果找不到匹配项,调用另一个函数。@RobertWadeOK Suraj,我想我现在更明白你在追求什么了。我用另一段代码修改了上面的答案,该代码在_array()中使用,以测试你的登录信息是否确实在该数组中。