我有一个如下所示的数组:
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,"));
}此外,我的数组并不总是与上面的完全匹配,但它总是遵循相同的布局,例如组:组、父、父
如果在页面底部运行php,则在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我知道我没有把这句话说得很好,我期待着一股谩骂和下注的洪流,但我尽我最大的努力来解释我的任务和目标。
发布于 2019-11-19 11:41:07
有一种方法可以做到。使用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
)https://stackoverflow.com/questions/58933096
复制相似问题