从键值对获取值PHP

时间:2019-02-23 12:26:34

标签: php json serialization deserialization

我有一个注册表格,该表格通过可序列化的方法将用户数据保存到文本文件中。

a:1:{i:0;s:44:"{"name":"Mario","pw":"3214","email":"mo@mo"}";}

我可以反序列化数据,但是在从键“名称”中提取值“ Mario”时遇到了一些麻烦。代码如下:

$array = file_get_contents('user.txt');

$artikel = unserialize($array);

foreach ($artikel as $item ){
     echo $item['name'];
}

我收到的错误是字符串偏移量'name'非法。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您有一个序列化的JSON字符串数组。

所以尝试这样

//$array = file_get_contents('user.txt');

$artikel = unserialize('a:1:{i:0;s:44:"{"name":"Mario","pw":"3214","email":"mo@mo"}";}');
//print_r($artikel);

foreach ($artikel as $item ){
     $json = json_decode($item);
     echo $json->name;
}
  

PS:以纯文本格式存储密码是非常糟糕的安全性,将其存储在简单文件中的安全性甚至更差,所以我希望系统永远不会真正使用它。 PHP提供了password_hash()   和password_verify(),请使用它们。

答案 1 :(得分:0)

您需要在json_decode之后foreach中使用true作为第二个参数,然后您将获得所需的数组。

<?php

$arr = 'a:1:{i:0;s:44:"{"name":"Mario","pw":"3214","email":"mo@mo"}";}';

$artikel = unserialize($arr);


foreach ($artikel as $item ){
     $response = json_decode($item, true);
     echo $response['name'];
}

?>