我在MySQL数据库中有一个JSON字符串,我想从WordPress中获取2个数字。
我的字符串如下:
a:1:{i:300;a:4:{s:7:"lessons";a:1:{i:302;i:1;}s:6:"topics";a:1:{i:302;a:2:{i:304;i:1;i:311;i:1;}}s:9:"completed";i:1;s:5:"total";i:4;}}
i:300
是课程ID。 topics
内的302
和311
都是311
。这些是完成的每个页面的ID。我需要得到最后一个,在这种情况下是$conn = new mysqli($servername, $username, $password, $dbname);
$user_id = get_current_user_id();
$sql1 = "SELECT meta_value FROM xrji_usermeta";
$sql3 = " WHERE user_id = ".$user_id." AND meta_key = '_sfwd-course_progress';";
$sql = $sql1 . "" . $sql3;
//echo "sql: ".$sql;
$a = $conn->query($sql);
$results = unserialize($a);
echo "<br>results: ".$results;
。
我基本上需要做以下事情的事情:
获取页面ID 在JSON字符串中查找页面ID 从JSON字符串主题获取最后一个ID
我该怎么做?
更新 - 从数据库中获取字符串但不显示。
$results
我有上面但是SELECT meta_value FROM xrji_usermeta WHERE user_id = 2 AND meta_key = '_sfwd-course_progress'
没有显示任何内容但是如果我通过续集pro运行查询它可以正常工作。
jQuery(document).ready(function() {
jQuery(".info").hide();
jQuery(".trigger").mouseout(function() {
jQuery(this).next(".info").slideUp(200);
});
jQuery(".trigger").mouseover(function() {
jQuery(this).next(".info").slideDown(200);
});
});
答案 0 :(得分:3)
您发布的内容不是JSON,而是 PHP序列化的结果,是通过serialize()函数完成的。
为了使用这些值,你必须得到这个字符串并传递给unserialize()函数,它会给你......好吧,它会给你一个错误:
PHP注意:unserialize():偏移量为5的235字节错误
那是因为你认为它是JSON并为我们格式化它。对于序列化字符串,JSON和death是可以的。你需要摆脱空白:
“一个:1:{I:300;一个:4:{S:7: ”经验“;一个:1:{I:302; I:1;} S:6: ”主题“;一个: 1:{I:302;一个:2:{I:304; I:1; I:311; I:1;}} S:9: “完成”; I:1; S:5: “总”; I:4;}}“
在您执行unserialize()
之后,您将获得:
Array
(
[300] => Array
(
[lessons] => Array
(
[302] => 1
)
[topics] => Array
(
[302] => Array
(
[304] => 1
[311] => 1
)
)
[completed] => 1
[total] => 4
)
)
所以,你得到一个$ a的PHP数组,现在你可以用它做任何你想做的事情:
$courseID = 300;
$lessons = array_keys($a[$courseID]['lessons']);
$topics = array_keys($a[$courseID]['topics']);
$pages = array_keys($a[$courseID]['topics'][ $topics[0] ]);
$lastPage = $pages[ count($pages)-1 ];
$主题中有302个,$ page中有304和311,$ lastPage中有311个。
旁注:如何区分JSON和PHP序列化
这有点简化,但它对记忆有好处。每当我看到一堆<one-letter>:<number>:<value>
个句点时,我认为它是序列化结果,其中<one-letter>
是类型( a rray, s tring, i nteger)和<number>
是字符或数组元素的长度(整数省略)。如果不是<one-letter>
,而是"quotation_marks"
中包含的描述性变量名称,或[square brackets]
中包含的数组,我认为它是JSON。