【问题标题】:compare two arrays then unset the matches in php比较两个数组然后在 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。看我的回答。谢谢。 :)

标签: php arrays wordpress foreach array-intersect


【解决方案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);
        }
}

【讨论】:

  • 我会在必要的两天结束后。
猜你喜欢
  • 2017-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-08
相关资源
最近更新 更多