【问题标题】:Storing PHP Arrays in Wordpress User Meta Database在 Wordpress 用户元数据库中存储 PHP 数组
【发布时间】:2011-12-06 12:12:12
【问题描述】:

这对于 PHP 专家来说应该很容易。我无法通过 update_user_meta 函数在 Wordpress 中存储和拉取数组。

所以我有一个这样构建的关联数组:

数组
(
    [film_genres] => 数组
        (
            [行动] => 50
            [喜剧] => 50
            [犯罪] => 50
            [纪录片] => 50
            [戏剧] => 50
            [家庭] => 50
            [恐怖] => 50
            [浪漫] => 50
            [科幻] => 50
            [惊悚片] => 50
        )

    [电影类型] => 数组
        (
            [大片] => 0
            [独立] => 0
        )

    [film_eras] => 数组
        (
            [1920s_1940s] => 0
            [1950s_1960s] => 0
            [1970s_1980s] => 0
            [1990s_2000s] => 0
            [post_2010] => 0
            [pre_1920s] => 0
        )

    [上次更新] => 2011-10-12 21:21:28
)

但是当我通过以下方式更新用户元表中的这些数据时:

update_user_meta($user_id, $meta_key, $meta_value, $prev_value)

数据被正确地放入数据库,但是当我调用数据并将新数组打印到屏幕时,它在数组中有一个嵌套的数组键 [0],如下所示:

大批 ( [0] => 数组 ( [film_genres] => 数组 ( [行动] => 50 [喜剧] => 50 [犯罪] => 50 [纪录片] => 50 [戏剧] => 50 [家庭] => 50 [恐怖] => 50 [浪漫] => 50 [科幻] => 50 [惊悚片] => 50 ) [电影类型] => 数组 ( [大片] => 0 [独立] => 0 ) [film_eras] => 数组 ( [1920s_1940s] => 0 [1950s_1960s] => 0 [1970s_1980s] => 0 [1990s_2000s] => 0 [post_2010] => 0 [pre_1920s] => 0 ) [上次更新] => 2011-10-12 21:21:28 ) )

我怎样才能让它像我的第一个数组一样存储数组?我正在通过 WP 命令拉取元值数组:

$wp_user_film_prefs_arr = get_user_meta( $wp_user_id, $wp_user_film_prefs_key_label, false );

我做错了什么吗?提前谢谢!!!

【问题讨论】:

    标签: php arrays wordpress multidimensional-array associative-array


    【解决方案1】:

    您是否将serialize() 视为一个str 并将此str 存储到您的db 中,而unserialize() 从db 获取后将str 存储到数组中?

    【讨论】:

    • WordPress 在幕后为您进行序列化。 @harkra 有正确的答案。
    【解决方案2】:

    您需要将最后一个参数从false设置为true

    $wp_user_film_prefs_arr = get_user_meta( $wp_user_id, $wp_user_film_prefs_key_label, true );
    

    第三个参数是$single:

    (boolean)(可选)如果为真则返回元数据字段的值,如果为假则返回一个数组。

    默认值:假

    这在您看来可能会适得其反,但元数据字段可以包含多个值。在您的情况下,您不需要那个,而是单个值。单个值是您的数组。

    另请参阅:get user metaCodex

    【讨论】:

    • 是的,你是对的!我最初选择了错误的想法,认为它会返回数组,就像在我的值数组中一样,但它正在重新计算元数据字段的数组。更改为 true 以返回值,然后将其存储为带有“maybe_unserialize($wp_user_film_prefs_val);”的数组谢谢大佬!
    • 很难将数组视为单个值
    • 这确实是一个糟糕的api设计,谢谢你的回答!
    猜你喜欢
    • 2018-10-08
    • 2010-12-19
    • 1970-01-01
    • 2014-06-04
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多