比较两个数组然后在 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:如何将一个数组中的键与另一个数组中的值进行比较,并返回匹配项?

PHP:如何比较一个数组中的键与另一个数组中的值,并返回匹配?

比较两个对象数组并在新数组中返回匹配值

如何在 es6 中仅比较和过滤两个对象数组中不匹配的数组

如何比较两个数组并在id匹配的情况下更改名称?

比较两个数组以查找匹配值的 for 循环