如果数组中的值与string-php匹配,则将其从数组中移除

如果数组中的值与string-php匹配,则将其从数组中移除,php,arrays,Php,Arrays,我有一个如下所示的数组: staff : staff,company managers : managers,staff,company executives : executives,staff,company customers : customers,company loyalty members : loyalty members,customers,company non loyalty : non loyalty,customers,company 使用以下命令创建阵列: arra

我有一个如下所示的数组:

staff : staff,company
managers : managers,staff,company
executives : executives,staff,company
customers : customers,company
loyalty members : loyalty members,customers,company
non loyalty : non loyalty,customers,company
使用以下命令创建阵列:

array_push($group_array, "$group : $area"); 
这个数组是根据命令的输出创建的,我想删除staff和customers的值,因为就我而言,它们基本上是父对象,所以我不希望它们出现在我的数组中

我一直在试图找到一种基本上做到这一点的方法(不是我的实际php代码):

为了尝试这样做,我一直在尝试使用strpos,但我不知道如何比较数组值的各个区域。 这仅从我的阵列中删除了所有项:

if (strpos($area, ",$group,") !== false) {
    $group_array = array_diff($group_array, group_array(",$group,"));
 }
此外,我的数组并不总是完全匹配上述内容,但它总是遵循相同的布局,例如组:组、父、父

我在html页面中使用php,如果我在页面底部运行此命令:


foreach($group_array as $items ){
    echo "$items <br>";
} 

我知道我没有很好地表达这一点,我期待着一连串的辱骂和反对票,但我尽我所能解释我的任务和目标

这里有一种方法可以做到这一点。使用和使用
preg\u match\u all
提取逗号之间提到的所有组名,以查找它们:

$groups = array_reduce($group_array, function ($c, $v) { 
    preg_match_all('/,(\w+),/', $v, $matches);
    return array_merge($c, $matches[1]);
}, array());
由于可能存在重复项,因此我们将此数组传递,然后创建一个正则表达式以匹配每个值:

$regex = '/^(' . implode('|', array_unique($groups)) . ')\s*:/';
然后使用处理
$groups\u数组中的每个值,删除
左侧值在
$groups
数组中的值:

$group_array = array_filter($group_array, function ($v) use ($groups) {
    return !preg_match($regex, $v);
});
输出:

Array
(
    [1] => managers : managers,staff,company
    [2] => executives : executives,staff,company
    [4] => loyalty members : loyalty members,customers,company
    [5] => non loyalty : non loyalty,customers,company
)

请共享您的输入和预期输出php数组的实际打印。不从最终数组中删除它们,可以不首先添加它们吗?更多的代码示例会有所帮助!if正在清除我的数组中的任何值。我希望它是我的数组,没有以Staff和Customers@ThomasGregory在代码的更高层,我运行一个命令,构建一个更大的数组,我从$group和$area中挑选。我可以在代码的这一部分之前删除它,但问题是相同的。如何删除包含字符串“,$group”的值,因此,您希望保存项目1、2、4、5?我得到的印象是,您将知道如何实现我的目标,但这并不是全部。与其从经理和执行人员中删除“员工”,我想删除项目员工和项目客户。@a.smith是的,我已经阅读了所有评论,因为我发布了答案,我意识到我误解了你的问题。我会编辑…。@a.smith我想这个新版本会给你你想要的结果…谢谢@nick我可以在你的演示中看到这个工作,但在我的代码中,当我循环时,它仍然给我完整的数组。我甚至将代码中的foreach循环添加到了演示中。我在你的代码之前对它进行了数组移位,因为数组有不同的问题,这很好,如果我删除它,第一个项目会按预期放回数组。所以当我把数组回传到页面上时,数组就在那里了。我不认为你能在看不到所有内容的情况下提供帮助,但它相当长,相当混乱,因为它使用ldap创建阵列。我更新了你的演示,以更好地反映我在做什么,但它在那里工作,只是不在我的实时代码中
$group_array = array_filter($group_array, function ($v) use ($groups) {
    return !preg_match($regex, $v);
});
Array
(
    [1] => managers : managers,staff,company
    [2] => executives : executives,staff,company
    [4] => loyalty members : loyalty members,customers,company
    [5] => non loyalty : non loyalty,customers,company
)