提问人:Jamie Gamauf 提问时间:11/16/2023 最后编辑:Sebastian KaczmarekJamie Gamauf 更新时间:11/16/2023 访问量:35
Wordpress 用户元数组合并
Wordpress User Meta Array Merge
问:
我创建了一个名为“hca_recent”的新用户元数据。我正在从 ajax 调用中提取数据并将其作为数组添加到元数据中。
$hca_recent_array = array(
'recent_count' => $new_recent_count,
'post_id' => $post_id,
'video_id' => get_post_meta($post_id, "__cvm_video_id", true),
'post_title' => $_REQUEST['post_title'],
'video_url' => $_REQUEST['data_url'],
);
$hca_recent = update_user_meta(get_current_user_id(), "hca_recent", $hca_recent_array);
这将输出以下数组:
Array
(
[recent_count] => 42
[post_id] => 667
[video_id] => 881950864
[post_title] => Receiver Blocking: COD + Dots Drill | Tee Martin
[video_url] => https://player.vimeo.com/video/881950864?h=e9b41820da&autoplay=0&muted=0&loop=0&title=1&byline=1&portrait=1&color&dnt=0&background=0&transparent=0
)
这一切都很好。当触发另一个ajax调用时,我想添加到这个数组中。这就是问题发生的地方。我得到现有的用户元,如下所示:
$hca_recent_array_old = get_user_meta(get_current_user_id(), 'hca_recent', false);
然后,我想将现有数组与新的ajax调用事件合并。
$result_array = array_merge($hca_recent_array_old, $hca_recent_array);
$hca_recent = update_user_meta(get_current_user_id(), "hca_recent", $result_array);
我得到这个输出:
Array
(
[0] => Array
(
[recent_count] => 42
[post_id] => 667
[video_id] => 881950864
[post_title] => Receiver Blocking: COD + Dots Drill | Tee Martin
[video_url] => https://player.vimeo.com/video/881950864?h=e9b41820da&autoplay=0&muted=0&loop=0&title=1&byline=1&portrait=1&color&dnt=0&background=0&transparent=0
)
[recent_count] => 43
[post_id] => 695
[video_id] => 881950748
[post_title] => Tee Martin | Youth Coaching Keys to Success
[video_url] => https://player.vimeo.com/video/881950748?h=d3b0944767&autoplay=0&muted=0&loop=0&title=1&byline=1&portrait=1&color&dnt=0&background=0&transparent=0
)
我需要这个数组与 [0]、[1]、[2] 等正确合并。任何帮助都非常感谢。
合并或重新创建数组的每个选项。
答:
0赞
Sebastian Kaczmarek
11/16/2023
#1
问题是您将数组保存为用户元表中的字符串,然后在读取它时,您将新数组与字符串值(表示数组,但仍然是字符串)合并,从而生成您显示的数组。
解决方案是以不同的格式(例如 JSON)将数组保存在元表中。它将允许您在读取后将其解析为有效数组。
下面是一个示例。
像这样保存您的数组:
$hca_recent = update_user_meta(get_current_user_id(), "hca_recent", json_encode($hca_recent_array)); // json_encode() it
这将导致在表中保存类似内容的内容:
{ "recent_count":42, "post_id":667, "video_id": 881950864, "post_title": "Receiver Blocking: COD + Dots Drill | Tee Martin", "video_url": "https://player.vimeo.com/video/881950864?h=e9b41820da&autoplay=0&muted=0&loop=0&title=1&byline=1&portrait=1&color&dnt=0&background=0&transparent=0" }
然后,像这样阅读:
$hca_recent_array_old = get_user_meta(get_current_user_id(), 'hca_recent', false);
$hca_recent_old_parsed = json_decode($hca_recent_array_old); // now json_decode() it
然后你可以像这样更新 Meta:
$result_array = array_merge($hca_recent_old_parsed, $hca_recent_array); // merge the parsed array
$hca_recent = update_user_meta(get_current_user_id(), "hca_recent", json_encode($result_array)); // json_encode() it again
评论
0赞
Jamie Gamauf
11/17/2023
谢谢。我确实必须将(数组)添加到旧数组中。如果该值为空或不存在,则返回 null 结果。 有一个问题:它们array_merge覆盖原始数组。也许我不清楚。我希望保留旧数组并将新数组添加到其中。因此,它变成了一个我可以添加到的新多维数组。$result_array = array_merge((array)$hca_recent_old_parsed, $hca_recent_array); // merge the parsed array
评论
array_merge($hca_recent_array_old, [$hca_recent_array]);