为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 WordPress (PHP) 编写/读取和删除嵌套数组

如何使用 WordPress (PHP) 编写/读取和删除嵌套数组

PHP
天涯尽头无女友 2022-07-16 18:41:57
我在实现我的计划时遇到了一些问题。我的初始情况如下:我有一个包含不同内容的数组。在此示例中,它看起来像这样:$tmp[ get_current_user_id() ] = array(    'id'      => 5,    'ref'     => true);现在我想使用 WordPress 中的函数将这个数组保存在某个键下,该函数add_post_meta()到目前为止有效:add_post_meta( $post_id, 'tmp', $tmp );正如您在上面看到的,我将当前的用户 ID 用作数组的键。如果我现在在我的数组中有 2 个条目并输出它,我有以下方案:$tmp = get_post_meta( $post_id, 'tmp' );error_log( print_r( $tmp, true ) );----------------------------------------Array(    [0] => Array        (            [32] => Array                (                    [id] => 10                    [ref] =>                 )        )    [1] => Array        (            [44] => Array                (                    [id] => 20                    [ref] =>                )        ))然而,在这一点上,我没有更进一步。对我来说,现在有两个问题:如何在get_current_user_id()不运行多个循环的情况下使用(作为我的密钥)函数访问正确的数组?我现在如何删除用户 ID 为 44 的条目,以便我的数组看起来像这样?:删除后的结果:Array(    [0] => Array        (            [32] => Array                (                    [id] => 10                    [ref] =>                 )        ))有一个函数delete_post_meta(),但我不知道它应该如何与嵌套数组一起使用。我非常感谢任何帮助!
查看完整描述

1 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

add_post_meta ( https://developer.wordpress.org/reference/functions/add_post_meta/ ) 有一个$unique默认为 false 的标志。这就是导致外部数组的原因 - 每次添加一个带有 id 和 ref 的新单元素数组时,它都会被附加到tmp.

但是,如果启用$unique,则每次都会覆盖现有数组 - 我认为这也不是您想要的。因此,add_post_meta您应该执行以下操作,而不是使用 :

  1. 获取tmp帖子元并将其存储在变量中

  2. 将用户 ID => 值对添加到变量

  3. 用于update_post_meta覆盖tmp修改后的数组

对于get_post_meta,请确保设置$single为 true (第三个参数) - 否则您将再次将其包装在外部数组中):

// step 1: retrieve current value of 'tmp' meta

$user_list = get_post_meta($post_id, 'tmp', true);

if ($user_list === false) { // meta wasn't set yet

    $user_list = []; // initialize array

}


// step 2: set information for current user

$user_list[ get_current_user_id() ] = [ 'id' => 1337, 'ref' => '...'];


// step 3: overwrite 'tmp' post meta with updated array

update_post_meta($post_id, 'tmp', $user_list);

然后要删除一个元素,请执行以下操作:


$user_list = get_post_meta($post_id, 'tmp', true);

if ($user_list === false) { // meta wasn't set yet

    $user_list = []; // initialize array

}


// step 2: delete desired user using unset

$user_id_to_delete = 44;

unset($user_list[ $user_id_to_delete ]);


// step 3: overwrite 'tmp' post meta with updated array

update_post_meta($post_id, 'tmp', $user_list);

阅读将像这样工作(仅使用get_post_meta):


$user_list = get_post_meta($post_id, 'tmp', true);

if ($user_list === false) { // meta wasn't set yet

    $user_list = []; // initialize array

}


// iterate over all entries

foreach ($user_id => $user_info) {

    echo "User $user_id: ".json_encode($user_info).'<br/>'.PHP_EOL;

}

// read a single user's entry:

$user_id = 32;

echo "User ${user_id}'s entry: ".json_encode( $user_list[$user_id] ).

     '<br/>'.PHP_EOL;


查看完整回答
反对 回复 2022-07-16
  • 1 回答
  • 0 关注
  • 112 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信