Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.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检查item=value的JSON字符串_Php_Arrays_Json - Fatal编程技术网

PHP检查item=value的JSON字符串

PHP检查item=value的JSON字符串,php,arrays,json,Php,Arrays,Json,我需要在json字符串中获取一个特定值 json字符串来自api urlhttp://url:port/api.php?action=reg_user&sub=list和类似的输出 [{"id":"1","username":"username1","credits":"0","group_id":"1","group_name":"Administrators","last_login":"1511883014","date_registered":"1421604973","email":"

我需要在json字符串中获取一个特定值

json字符串来自api url
http://url:port/api.php?action=reg_user&sub=list
和类似的输出

[{"id":"1","username":"username1","credits":"0","group_id":"1","group_name":"Administrators","last_login":"1511883014","date_registered":"1421604973","email":"test1@my-email.com","ip":"8.8.8.8","status":"1"},{"id":"31","username":"username2","credits":"0","group_id":"1","group_name":"Administrators","last_login":"1539813642","date_registered":"1473632400","email":"test2@my-email.com","ip":"8.8.8.8","status":"1"},
我想检查username=username1的信用值

如果积分>30,则执行x,否则执行y

我想首先我需要解码这个jason字符串

所以我试着去做

$api_result = file_get_contents( 'http://url:port/api.php?action=reg_user&sub=list' );
$json_decode = json_decode($api_result);
echo $json_decode;
希望它能以一种格式良好的结构响应数组,相反,它只输出单词
array
。我该怎么办

谢谢

更新1…

因此,我再次检查,我可以回显$api_结果,这样我就知道
文件_get_contents
工作正常,我尝试了两个注释建议,但都不起作用

其中一个建议是让我的php $api\u结果=文件\u获取\u内容(“”); $json_decode=json_decode($api_结果); echo$json_decode['username']

下面是一个屏幕截图,显示在不是propper json字符串的情况下,echo$api_结果的格式

所以对我来说,这看起来像是用打开的(并且都包含在一对[]中,然后每个结果都包含在{}中,就像我期望的json字符串一样,对吗?但是我认为json字符串使用{},数组使用{},所以对我来说,这看起来像数组中的字符串

我查看并尝试了
var\u dump(json\u decode($json));
,它确实打印了这封信

更新2

我只是试着把数据粘贴进去,它能够很好地解码数据


然后,如果底部的json_decode示例也不起作用,它会给我一个副本,返回一个空值,比如json_decode在我的服务器上不起作用?

来自第二个屏幕截图(请剪切并粘贴文本!)您可以看到解码后的JSON是一个具有属性
id
username
等的对象数组。因此,您可以使用对象表示法访问它们。此代码使用原始问题的api_结果片段来演示如何执行所需操作:

$api_result = '[{"id":"1","username":"username1","credits":"0","group_id":"1","group_name":"Administrators","last_login":"1511883014","date_registered":"1421604973","email":"test1@my-email.com","ip":"8.8.8.8","status":"1"},{"id":"31","username":"username2","credits":"0","group_id":"1","group_name":"Administrators","last_login":"1539813642","date_registered":"1473632400","email":"test2@my-email.com","ip":"8.8.8.8","status":"1"}]';
$json = json_decode($api_result);
foreach ($json as $user) {
    if ($user->username == 'username1') {
        if ($user->credits > 30) {
            // do x
            echo "user $user->username has more than 30 credits ($user->credits)";
        }
        else {
             // do y
            echo "user $user->username has less than or equal to 30 credits ($user->credits)";
        }
    }
}
输出:

user username1 has less than or equal to 30 credits (0)

如果它确实是一个数组,您需要做的是像访问数组一样访问它。例如,
echo$json_decode['username']
。如果您想一次看到整个数组,请为它创建一个循环,或者使用
var_dump
使用
print_r(json_decode($api_result))转储变量;
打印一个结构。在解码后的结构上运行一个循环,并检查
$arr[i]['credits']>30
。感谢您的评论@Wreigh,可能是重复的,但不幸的是,这没有回音。返回一个空白屏幕更新您的问题,包括您尝试过的内容,以便我们可以进一步帮助您:)在我尝试制作$api\u result=my original file\u get\u contents之前,这一切都是完美的。那么,我的file\u get\u contents是否存在问题???这可能是字符编码问题吗?返回完全空白屏幕。。。大概这是因为它无法解码api返回的信息…抱歉@Nick,我在输入api URL时犯了错误。。。现在一切都好了,这太完美了,谢谢!!!太好了。很高兴我能帮忙。