如何解决“在数组中添加元素而不是替换元素”?

时间:2019-09-27 22:55:50

标签: php mysql wordpress

我正在尝试编写一个函数,使登录的用户可以添加喜欢的属性并将其存储为用户元表中的数组,但是与其添加多个值,不如添加一个值并继续替换它。我在这里做错了什么?我也没有在数据库中手动添加它,如何读取结构?

这是针对WordPress

function wms_add_to_usermeta( $post_id )
{
    $favorites   = $this->wms_get_user_meta();
    $favorites[] = $post_id;
    $this->wms_update_user_meta( $favorites );

    return true;
}

WMS GET USER META功能

function wms_get_user_meta( $user = "" )
    {

        if( ! empty( $user ) ) {

            $userdata = $this->get_user_by( 'login', $user );
            $user_id  = $userdata->ID;

            return get_user_meta( $user_id, $this->favorites_meta_key, true );
        }
        else {

            return get_user_meta( $this->wms_get_user_id(), $this>favorites_meta_key, true );
        }
    }

更新用户元

function wms_update_user_meta( $arr )
    {
        return update_user_meta( $this->wms_get_user_id(), $this->favorites_meta_key, $arr );
    }

表数据结构a:1:{i:0; i:7;}不断替换i:7;其中7是$ post_id

1 个答案:

答案 0 :(得分:0)

在类中调用mws_get_user_meta时,您将定义$ favorites。然后,在$ favorites后面添加方括号时,将其重新声明为数组,但由于它已经是一个数组,或者因为Alex建议您这样做时数组可能会丢失其格式,因此将其忽略。然后使用=推入post_id,使其结束于数组末尾。

所以您最终得到:

$this->wms_update_user_meta( array('stuff returned from wms_get_user_meta, $post_id);

这可以解释为什么您的7始终位于数据的末尾。

我将看一下mws_get_user_meta函数,并确保您发送的参数正确。核心需要3个参数,我怀疑您的类的函数也是如此。这是core function

function update_user_meta( $user_id, $meta_key, $meta_value, $prev_value = '' ) {
    return update_metadata( 'user', $user_id, $meta_key, $meta_value, $prev_value );
}

请注意,$ user_id,$ meta_key,$ meta_value都是必需的,否则它将返回false。