【问题标题】:Delete value by key in user meta array in WordPress在WordPress的用户元数组中按键删除值
【发布时间】:2019-04-27 18:57:37
【问题描述】:

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

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

)

为了接收这个数组,我这样做:

$get_ids = get_user_meta( 3, 'additional_ids', false );

很好,到目前为止!现在我有一个小问题,因为例如我需要从user_meta 中删除值1509。所以我渴望通过目前有效的值来找出关键:

$key = array_search( (int) $value, $get_ids[0], true );

所以我现在发现密钥是[0]。但是我现在如何从用户元数据中删除它并保存它,我的元数据数组在保存后看起来像这样:

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

)

这是我尝试过的:

//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 );

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

【问题讨论】:

  • 意思是,有多个数组的机会,你不想指定$get_ids[0]对吧?
  • 只有一个第一个数组 [0],因为我在这里使用 0。我想从我在问题中命名的 meta_data 字段中的这个父数组中删除一个孩子。而且我不在乎它应该如何工作。如果可以在没有错误功能的情况下做到这一点,那就更好了,但我现在需要工作。
  • 使用array_pop($get_ids[0]);。注意:它总是删除第一个元素。

标签: php arrays wordpress multidimensional-array


【解决方案1】:

我们需要解决的第一件事是如何您将元数据添加到您的用户。如果您使用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);

这样做会将 1509 和 1597 添加到用户元additional_ids

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

$additional_ids = get_user_meta(3, 'additional_ids', false);

这将返回一个这样的数组:

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

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

像这样:

delete_user_meta( 3, 'additional_ids', 1509 );

这意味着如果您再次获得额外的 id,它将如下所示:

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

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

这样做无需尝试查找与要删除的值关联的键,还可以确保您不会意外弄乱可能包含或不包含在其中的任何其他值数组。

【讨论】:

  • 尝试了完全相同的方法,但删除函数后数组仍然相同。
  • 哦,我明白了,问题是您已将所有 id 保存到一个数组中,并将其添加到用户元的单个实例中,而不是保存到多个实例中。不确定您是否知道这一点,但您可以继续使用相同的 meta_key 添加 meta,当您 get_user_meta 时,您会收到一个包含所有这些已保存值的数组。一旦它以这种方式运行,您将能够适当地使用delete_user_meta。 - 希望它有所帮助:) @Mr.Jo
  • @Mr.Jo - 啊,那是因为我在add_user_meta() 第三个参数上犯了一个错误,它应该是假的,而不是真的。我已经编辑了我的答案以显示正确的陈述:)
  • 我目前正在实施您所做的这些更改。我会让你知道它今天是否有效并勾选你的答案!非常感谢您花在这方面的时间。
  • @Mr.Jo 我非常高兴能帮上忙 :)
【解决方案2】:

在你执行 unset() 之后,你只需要使用 array_values() 更新 $get_ids[0] 以再次重新设置数组

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

// rebase the array
$get_ids[0] = array_values( $get_ids[0] );

//Save it again in the database
update_user_meta( 3, 'additional_ids', $get_ids, false );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-26
    • 2019-05-09
    • 2017-03-10
    • 2013-06-19
    • 1970-01-01
    • 1970-01-01
    • 2019-10-03
    相关资源
    最近更新 更多