比较两个数组然后在 php 中取消匹配
Posted
技术标签:
【中文标题】比较两个数组然后在 php 中取消匹配【英文标题】:compare two arrays then unset the matches in php 【发布时间】:2013-10-06 19:37:46 【问题描述】:我在 WordPress 中。我需要比较两个数组,然后从其中一个数组中取消任何匹配项。问题是,其中一个数组是从 get_users 获取数据,所以我想我可能必须使用 foreach 将其转换为字符串,所以我可以告诉它为数组中的用户提供 user_login。除非我错了,否则我认为我需要做的是获取数组,执行 foreach 语句,以便我可以告诉它获取 user_logins,然后将它们全部转换回数组。这是我到目前为止所拥有的一切(我不确定我是否在其中正确地执行了 if 语句(“null”是否是正确的限定符):
$adminnames = get_users('role=administrator');
$result = array_intersect($adminnames, $username);
if($result !== null)unset($username[$result]);
$username 是短代码中的属性之一。
另外,请原谅我的模糊,如果“用户名”中只有一个人,这是否意味着它不是一个数组?因为如果是这样,那可能会搞砸。
-- 更新--
如果获取所有管理员的 user_login 的唯一方法是执行 foreach 然后回显它,这甚至可能都不可能。
【问题讨论】:
所以你想获取所有不是$username
的管理员的用户名? $username
是一个数组吗?它是如何定义的?
正如我所指出的,$username 是简码中的一个属性。 [shortcode username="joebob, billybob, jennybob"] 无论如何,我刚刚找到了一个可行的解决方案。将显示在答案中。
你应该使用explode
是的,我已经在使用 preg_split。看我的回答。谢谢。 :)
【参考方案1】:
我找到了一个非常有效的解决方案。我已经在 $username 属性上做了一个 preg_split,所以在我运行它之后,这就是我从 $username 属性中取消设置管理员用户名的操作:
$users = preg_split("/[\s,]+/",$username);
wp_get_current_user();
if(current_user_can(administrator))
$nohidename = array_search($current_user->user_login,$users);
if($nohidename !== FALSE)unset($users[$nohidename]);
所以它只是根据当前用户是否是管理员来执行此操作。如果没有,它会保持原样。效果很好。
EDIT - 一种更简单的方法,无需 array_search:
if(current_user_can(administrator))
if($username)
unset($username);
【讨论】:
我会在必要的两天结束后。以上是关于比较两个数组然后在 php 中取消匹配的主要内容,如果未能解决你的问题,请参考以下文章
PHP:如何将一个数组中的键与另一个数组中的值进行比较,并返回匹配项?