我有一个如下所示的数组:
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");
此数组是根据命令的输出创建的,我想删除职员和客户的值,因为出于我的目的,他们基本上是父母,所以我不希望它们出现在我的数组中。
我一直在尝试找到一种基本上可以做到这一点的方法(不是我的实际php cod)e:
if array_value contains ",group," then remove it
要尝试执行此操作,我一直在尝试使用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>";
}
我的输出为空白。我猜是因为我的if是否符合所有条件?
期望的(希望为)数组看起来像这样,但是它并不像删除项目0和3那样简单,因为数组可能会改变:
managers : managers,staff,company
executives : executives,staff,company
loyalty members : loyalty members,customers,company
non loyalty : non loyalty,customers,company
我知道我的措辞还不够好,我希望收到大量的虐待和反对意见,但我会尽力解释我的任务和目标。
答案 0 :(得分:1)
这是执行此操作的一种方法。使用array_reduce
和使用preg_match_all
提取逗号之间提到的所有组名:
$groups = array_reduce($group_array, function ($c, $v) {
preg_match_all('/,(\w+),/', $v, $matches);
return array_merge($c, $matches[1]);
}, array());
由于可能存在重复项,我们将此数组传递给array_unique
,然后创建一个正则表达式以匹配每个值:
$regex = '/^(' . implode('|', array_unique($groups)) . ')\s*:/';
然后使用array_filter
处理$group_array
中的每个值,删除:
左边的值在$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
)