Php 试图向数组添加新的key=>value对,但它似乎创建并嵌套了新的数组
我试图将新的key=>值对添加到我拥有的数组中。键是对应于用户ID的整数。这些值最初只是请求的字符串 所讨论的数组以序列化形式存储在另一个数组用户的索引0处,该数组用户参与与我正在修改的帖子相关的更大的元数据数组 我的过程是这样的: 从某个WordPress函数中提取可能包含数组的变量。如果没有数组,那么这个变量就是空的,我们就不会看到错误。 如果数组变量为非空且不包含等于用户ID的键,则添加键=>值对。 如果数组变量为非空且包含与用户ID相等的密钥,则打印用户已存在。 在所有其他情况下,即当数组变量为空时,创建一个新数组并添加第一个key=>value对。 然而,通过这个过程,我看到所有新添加的数组嵌套在第一个数组中,然后是第二个数组,依此类推。当我使用print\r$eventUsers测试数组的内容时,我会看到这种输出:Php 试图向数组添加新的key=>value对,但它似乎创建并嵌套了新的数组,php,arrays,wordpress,Php,Arrays,Wordpress,我试图将新的key=>值对添加到我拥有的数组中。键是对应于用户ID的整数。这些值最初只是请求的字符串 所讨论的数组以序列化形式存储在另一个数组用户的索引0处,该数组用户参与与我正在修改的帖子相关的更大的元数据数组 我的过程是这样的: 从某个WordPress函数中提取可能包含数组的变量。如果没有数组,那么这个变量就是空的,我们就不会看到错误。 如果数组变量为非空且不包含等于用户ID的键,则添加键=>值对。 如果数组变量为非空且包含与用户ID相等的密钥,则打印用户已存在。 在所有其他情况下,即当数
Array
(
[0] => Array
(
[0] => Array
(
[4] => requested
)
[4] => requested
)
[4] => requested
)
对于上下文,以下是用户在更新\u post\u元函数自动序列化的所有post元数据的较大数组中的外观:
[users_attending] => Array
(
[0] => a:2:{i:0;a:2:{i:0;a:1:{i:4;s:9:"requested";}i:4;s:9:"requested";}i:4;s:9:"requested";}
)
以下是相关代码:
$currentUser = get_current_user_ID(); //let's say this is 4 for now
$eventUsers = get_post_meta(get_the_ID(), 'users_attending');
if (!empty($eventUsers) && !array_key_exists($currentUser, $eventUsers)) {
$eventUsers[$currentUser] = "requested";
update_post_meta(get_the_ID(), 'users_attending', $eventUsers);
//array exists but user is not yet attending
} elseif (!empty($eventUsers) && array_key_exists($currentUser, $eventUsers)) {
//user is already attending
} else {
$eventUsers = array();
$eventUsers[$currentUser] = "requested";
update_post_meta(get_the_ID(), 'users_attending', $eventUsers); //note that this adds the metadata key and value if it's not already there
//first user attending
}
如何确保键=>值对被添加到用户零索引内的第一个数组,而不是我看到的嵌套行为?程序看起来正常,请尝试删除以前运行的数据
还考虑函数GET*PaseMeta可能会返回一个数组而不是所需的数组。
尽管已经清除了先前的运行数据,但还是看到了这个问题。至于第二点,我相信它确实返回了一个数组,但是只返回了一个元素,这个元素本身就包含了我的序列化数组。尽管数组数组是一个元素,但我没有指定零索引,这导致了这种行为。据我所知,我设法解决了这个问题。谢谢很高兴我能提供帮助,请确保通过帮助他人完成任务来向前支付!:D