基于编码数据的PHP关联数组

基于编码数据的PHP关联数组,php,arrays,Php,Arrays,我对php和mysql有点陌生,所以这可能是一个语法错误之类的简单问题,但我没有机会使用其他示例 my db中的数组(JSON编码): 从UserData获取JSON编码的数组: if ($stmt = $con->prepare("SELECT UserData FROM users WHERE Username=?")) { $stmt->bind_param("s", $Username); $stmt->execute(); $result =

我对php和mysql有点陌生,所以这可能是一个语法错误之类的简单问题,但我没有机会使用其他示例

my db中的数组(JSON编码):

从UserData获取JSON编码的数组:

if ($stmt = $con->prepare("SELECT UserData FROM users WHERE Username=?")) {
    $stmt->bind_param("s", $Username);
    $stmt->execute();
    $result = $stmt->get_result();
    $data = $result->fetch_assoc();
    $json = json_decode($data['UserData']);
    echo $json[0];
}
结果:

["option1"=>"1","someotherthing"=>"abc"]
为什么将“echo$json[0];”替换为“echo$json['option1'];”将无法工作,尽管数组已解码

编辑:整理好了!使用以下方法执行此操作:

if ($stmt = $con->prepare("SELECT UserData FROM users WHERE Username=?")) {
    $stmt->bind_param("s", $Username);
    $stmt->execute();
    $result = $stmt->get_result();
    $data = $result->fetch_assoc();
    $json = json_decode($data['UserData']);
    $array = json_decode(json_encode($json),true);
    echo $array['test'];
}

这不是存储数据的最佳方式。如您所见,它作为一个数据库存储在您的数据库中。如果您希望访问此数组中的变量,那么您将很难访问

实现您所追求的目标的一种更“常见”的方法是在数据库中存储
JSON
,并访问它

//....other code....
$data = $result->fetch_assoc();
$json = json_decode($data);

echo $json->someotherthing;

例如,您正在获取一个数据集合,而不是一行。可以通过利用返回关联数组来实现这一点


编辑 这是对您的问题的编辑。您仍然将字符串数组存储为json。这就是为什么你不能访问它。我假设你有一个实际的数组。这是您希望存储所述数据的方式:

// example array
$array = array('test' => 'hello', 'derp' => 'herp');
// encode it
$json = json_encode($array);
// store it
// DO YOUR MYSQLI INSERT, ETC...

这不是存储数据的最佳方式。如您所见,它作为一个数据库存储在您的数据库中。如果您希望访问此数组中的变量,那么您将很难访问

实现您所追求的目标的一种更“常见”的方法是在数据库中存储
JSON
,并访问它

//....other code....
$data = $result->fetch_assoc();
$json = json_decode($data);

echo $json->someotherthing;

例如,您正在获取一个数据集合,而不是一行。可以通过利用返回关联数组来实现这一点


编辑 这是对您的问题的编辑。您仍然将字符串数组存储为json。这就是为什么你不能访问它。我假设你有一个实际的数组。这是您希望存储所述数据的方式:

// example array
$array = array('test' => 'hello', 'derp' => 'herp');
// encode it
$json = json_encode($array);
// store it
// DO YOUR MYSQLI INSERT, ETC...

尝试
print\r($data[0])
@ASR我已经这样做了,我得到了以下结果:数组([0]=>[“option1”=>“1”,“someotherthing”=>“abc”])如何使用值和键?如果您只希望返回一行,请不要使用
mysqli\u fetch\u all()
。使用mysqli\u fetch\u assoc()->
$data=mysqli\u fetch\u assoc($result)
,然后您可以做
$data['option1']
尝试
打印($data[0])
@ASR我已经这样做了,我得到了:数组([0]=>[“option1”=>“1”,“someotherthing”=>“abc”])如何使用值和键?如果您只希望返回一行,请不要使用
mysqli\u fetch all()
->
$data=mysqli\u fetch\u assoc($result)
,然后您可以执行
$data['option1']
Hi@Darren,谢谢您的提示。我已经修改了我的代码,使其与您的代码类似,但是使用“echo$json->someotherthing”会出现以下错误:“试图获取非对象的属性…”。请查看我更新的问题。@lankymose我已经编辑了我的答案!看看下面。这与你存储实际数据的方式有关。存储“字符串”和“JSON”有什么区别?@yourcommonsense他试图在其中放入数组。这是一种更易于管理的处理数据的方法,然后尝试将“字符串数组”转换为有用的内容hi@Darren,感谢您的提示。我已经修改了我的代码,使其与您的代码类似,但是使用“echo$json->someotherthing”会出现以下错误:“试图获取非对象的属性…”。请查看我更新的问题。@lankymose我已经编辑了我的答案!看看下面。这与你存储实际数据的方式有关。存储“字符串”和“JSON”有什么区别?@yourcommonsense他试图在其中放入数组。这是一种更易于管理的处理数据的方法,然后尝试将“字符串数组”转换为有用的内容