【问题标题】:wordpress show unserialize data in a smart waywordpress 以一种智能的方式显示反序列化数据
【发布时间】:2014-11-04 03:48:56
【问题描述】:

在 wordpress 中,我将数据作为序列化方法存储在数据库中。现在我已经获取了数组中的数据。所以代码是这样的

global $wpdb;
 $results = wpdb->get_results("SELECT * FROM `table` where `id` = 3");
 foreach($results as $result) {
    echo '<pre>';
        print_r($result);
    echo '</pre>';
 }

这个给我这样的数据

Array
(
    [0] => stdClass Object
        (
            [id] => 1
            [title] => a:3:{i:1;s:8:"test1";i:2;s:8:"test2";i:0;s:0:"test3";}
            [page] => a:3:{i:1;s:3:"dsa";i:2;s:4:"dsds";i:0;s:0:"sdvdsvds";}
        )

)

现在我想计算值并希望在列表中显示所有值。在这里你可以看到我有标题和页面的 3 个值。所以我把标题作为计数器。所以我做了这样的

foreach($results as $result) {
    $count = count(unserialize($result->title)); // This gave 3
    for( $i = 0; $i<$count; $i++ ) {
        echo '<li></li>'; // This gave me 3 li's that I wanted
    }
 }

现在要获取标题和页面的所有值,我需要再次使用 foreach 和 unserialize 方法。所以有人可以告诉我在此处(在 li's 内)显示标题和单词数据的好方法是什么。任何建议和帮助都会非常感激。

【问题讨论】:

    标签: php wordpress serialization


    【解决方案1】:

    您似乎已经完成了 90% 的工作,您只需要显示数据即可。

    global $wpdb;
    $results = wpdb->get_results( "SELECT * FROM `table` where `id` = 3" );
    
    foreach( $results as $result ) {
        $titles = unserialize($result->title); 
        foreach( $titles as $title ) { // Loop through it
            echo '<li>'. $title ."</li>\n"; 
        }
    }
    

    我已删除您对count 的呼叫,好像它只是用来计算循环的次数,然后您就不需要它了。您可以使用foreach 循环来遍历数组中的所有项目。

    我在每个 &lt;/li&gt; 之后添加了一个换行符 (\n),这只是为了使生成的标记更具可读性。

    我还在每个左括号之后和每个右括号之前添加了空格,这符合 WordPress 编码标准。

    【讨论】:

    • 感谢您的回答。但是有没有更聪明的方法来显示所有数据。因为通过这样做,您的方法必须对每个数据(如标题、单词等)使用 foreach 循环
    • 如果需要显示,那是最好的方式。如果你用少数几行来做,那么这不是问题。如果您要处理成百上千或行,那么您将需要解决如何存储数据的问题。无论哪种方式,这是最好的方式。
    • 是的,我在序列化的数据库中一次存储 10 行。它的数据很长。所以我想要更聪明的方法。
    • 在不改变数据存储方式的情况下,这是您能够做到的最明智的方式。
    猜你喜欢
    • 2011-03-14
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    • 1970-01-01
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    相关资源
    最近更新 更多