我把用户的一些数据作为JSON储存为文件,每一行有类似一下格式的数据
{"a":"aa","b":"bb"}
...
{"a":"123","b":"234"}
 我现在用一个循环遍历这个文件,并且当遇到a为123的时候就停止遍历并且输出这行数据的b的值。
循环什么的用while循环整个文件,然后每循环一行数据就进行一次判断
但是这里有一个问题,php用json_decode出来的结果是对象(放到$obj内),也就是说不能像变量一样使用,当我的while拿到每行数据并且要对a是否为123进行判断的时候,就没办法了
if($obj -> a = "123")
这行代码就没用了,那应该怎么办呢?

解决方案 »

  1.   

    if('123'== $obj->a){
    echo $obj->b;
            //break;退出循环
    }
      

  2.   

    json_decode($xxx,TRUE);
    得到的就是数组
    其实无关你得到是数组还是对象,代码写错了,像1楼那样进行判断if($obj->a=='123'){
    //some code.
    }
      

  3.   

    这样是可以有正确的结果了,但是会有错误
    Notice: Trying to get property of non-object in E:\PHPnow\htdocs\qnw\processer\look.php on line 8
    第八行就是这个if语句
    if('123'== $obj->a)
      

  4.   

    竟然编辑不了。
    忘记了,此处的123我用的是一个变量$asd = "123"
      

  5.   

    用了TRUE,的确数组引用就好用多了,多谢
    但是如果不是数组,即便加了一个=,仍然是错误
    我此处的123是用的变量$asd = "123"
      

  6.   

    <?php
    $sid = $_GET["sid"];              //从url获得sid
    $creator = substr($_GET["sid"],14);           //切掉前14个字符
    $file = fopen("../people/".$creator."/sponsor.file", "r") or exit("Unable to open file!");   //打开用户配置文件
    while(!feof($file))          //循环开始
      {
    $obj = json_decode(fgets($file));         //把拿到的一行数据进行decode
    if($obj->sid = $sid)             //如果相等
    {
    $asd = $obj->content;         //把这行数据的content内容赋到$asd
    }
      }
      echo $asd;                     //推出循环输出符合的值
     fclose($file);
    ?>
      

  7.   

    十楼是原来的代码
    后来加了true和=就解决了
      

  8.   

    if($obj->sid == $sid)  //转了一圈你还是少写了个=号
      

  9.   

    就算加了等号,最后输出不了结果的
    Notice: Trying to get property of non-object in E:\PHPnow\htdocs\qnw\processer\look.php on line 8Notice: Trying to get property of non-object in E:\PHPnow\htdocs\qnw\processer\look.php on line 8Notice: Trying to get property of non-object in E:\PHPnow\htdocs\qnw\processer\look.php on line 8Notice: Undefined variable: asd in E:\PHPnow\htdocs\qnw\processer\look.php on line 13
      

  10.   

    但是把$obj->sid和$sid对调一下再加个等号就可以了
      

  11.   

    if($obj -> a = "123") 少了一个=号,你这个叫条件赋值,不叫条件判断
      

  12.   

    你可以自己写一个JSON读一下试试
    {"sid":"XXXXXXXXX","content":"XXXXXXXXXXX"}
      

  13.   

    难道不是吗?
    $s = '{"sid":"XXXXXXXXX","content":"XXXXXXXXXXX"}';
    $p = json_decode($s);
    if($p->sid == "XXXXXXXXX") echo 'ok';