【问题标题】:JSON and Arrays mixed up (in PHP)JSON 和数组混合(在 PHP 中)
【发布时间】:2014-02-12 13:22:11
【问题描述】:

这是我从我的 SQL 选择中得到的。数据是正确的,现在我想通过foreach来回显。

Array ( [0] => stdClass Object ( [sql_column] => [{"1":"value1", "2":"value2", "3":"value3"}] ) )

我尝试过(但没有奏效)的是:

$obj = json_decode($arr);
foreach($obj as $data){
echo $data->sql_column->1; //this should echo "value1", but it doesn't
}

有人看到我的错误吗?提前致谢!

【问题讨论】:

  • 首先,你不应该将 JSON 保存到 mysql 中。
  • @moonwave 为什么会这样?如果您谈到了一个序列化数组,它在包含特殊数据时可能包含特殊字符或 null 字符,您可能是对的,但是一个 json 数组?解释一下!
  • @FélixGagnon-Grenier 因为您使用 relational 数据库来获得标准化数据 - 如果您打算很好地存储 JSON 字符串,那么您最终会得到一个未标准化的模式 [即不可搜索,不可查询]。不同的是,如果你需要存储一点点数据,那是可以接受的。
  • @moonwave 我明白了。您说得对,它并不是要替代普通数据字段或表格,而是用于存储连接之间的会话变量,例如,它很有用。

标签: php sql arrays json foreach


【解决方案1】:

如果$arr 是您发布的数组,那么您不能json_decode 它,因为它是一个数组而不是JSON 字符串。

//First you need to get the string
$json = $arr[0]->sql_column;
//Then decode
$data = json_decode($json);
//Then loop
foreach($data as $key => $value){
   echo "$key = $value \n";
}

【讨论】:

    【解决方案2】:

    您的 json 似乎很复杂(二维数组),但您可以通过这种方式从中获取值:

    foreach($arr as $data){
        $json = json_decode($data->sql_column);
        $temp = (array)$json[0];
        foreach($temp as $k=>$v){
            print($v."<br/>");
        }
    }
    

    我希望你有一个想法......

    我使用 foreach for $arr 来覆盖多个值,如果需要,可以省略:

    $data=$arr[0];    
    $json = json_decode($data->sql_column);
    $temp = (array)$json[0];
    foreach($temp as $k=>$v){
    print($v."<br/>");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-30
      • 1970-01-01
      • 2012-07-25
      • 1970-01-01
      • 1970-01-01
      • 2011-05-09
      • 2013-09-16
      相关资源
      最近更新 更多