通过WordPress中的用户元数组中的键删除值

Mr.*_* Jo 2 php arrays wordpress multidimensional-array

我在WordPress页面上将此数组设置为WordPress用户:

Array
(
    [0] => Array
        (
            [0] => 1509
            [1] => 1597
        )

)
Run Code Online (Sandbox Code Playgroud)

要接收此数组,我正在这样做:

$get_ids = get_user_meta( 3, 'additional_ids', false );
Run Code Online (Sandbox Code Playgroud)

很好,到目前为止!现在,我已经有点问题,因为比如我需要删除值1509user_meta。所以我很想尝试通过当前有效的值来找出密钥:

$key = array_search( (int) $value, $get_ids[0], true );
Run Code Online (Sandbox Code Playgroud)

所以我现在发现关键是[0]。但是,现在我该如何从用户元数据中删除它,这又是一种聪明的方法,并保存它,使我的元数据数组在保存后如下所示:

Array
(
    [0] => Array
        (
            [0] => 1597
        )

)
Run Code Online (Sandbox Code Playgroud)

这是我尝试过的:

//Unset element to delete from the array
unset( $get_ids[0][ $key ] );


//Save it again in the database
update_user_meta( 3, 'additional_ids', $get_ids, false );
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时,数组完全混乱了,不再可读。

Fri*_*its 5

我们需要解决的第一件事是如何将元添加到用户。如果使用add_user_meta,则可以在同一个元键下添加多个元值。像这样:

//add_user_meta( $user_id, $meta_key, $meta_value, $unique );
add_user_meta(3, 'additional_ids', 1597, false);
add_user_meta(3, 'additional_ids', 1509, false);
Run Code Online (Sandbox Code Playgroud)

这样做将增加两个 1509和1597用户元additional_ids

如果您以这种方式添加了meta字段,它将允许您使用get_user_meta如下方式获取所有值:

$additional_ids = get_user_meta(3, 'additional_ids', false);
Run Code Online (Sandbox Code Playgroud)

它将返回这样的数组:

Array (
    [0] => 1597
    [1] => 1509
)
Run Code Online (Sandbox Code Playgroud)

但是,您可以通过使用删除该特定值来从该数组中删除任何值,而无需先获取该数组delete_user_meta();

像这样:

delete_user_meta( 3, 'additional_ids', 1509 );
Run Code Online (Sandbox Code Playgroud)

这意味着,如果您再次获得其他ID,则如下所示:

$additional_ids = get_user_meta(3, 'additional_ids', false);
print_r($additional_ids);
//prints out:
Array (
    [0] => 1597
)
Run Code Online (Sandbox Code Playgroud)

该函数内的第三个参数将确保仅删除具有该特定值的元数据。

通过这种方式,您无需尝试查找与要删除的值相关联的键,而且还可以确保您不会意外地弄乱该数组中可能有或没有的其他任何值。

  • @ Mr.Jo-啊,那是因为我在第三个参数`add_user_meta()`中犯了一个错误,它应该为false,而不是true。我已经编辑了答案以显示正确的陈述:) (2认同)
  • @ Mr.Jo我很高兴能为您提供帮助:) (2认同)