从JSON数组中获取最后一个值

时间:2016-07-07 09:36:20

标签: php wordpress

我在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内的302311都是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);
  });
});

1 个答案:

答案 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。