我这样做:
$attributes = array("a", "b", "c", "d","e","f", "g","h" ,"i","j","k","l");
foreach($all as $p) {
foreach($attributes as $key => $a) {
if (!$p->getAttribute($a)) {
unset($attributes[$key]);
}
}
}
但是unset似乎缩小了循环中的$attributes
数组,然后取消了想要的值。
编辑:这不是发生的事情。真正的问题是,由于这些是嵌套循环,如果!$p->getAttribute($a)
返回false,我不应该在数组中取消它,因为第一个循环foreach($all as $p)
可能为$ p提供一个返回true的属性,因此需要保留。
我需要它,以便!$p->getAttribute($a)
然后我想从$属性中删除相应的$ a。什么是最有效的方法?
答案 0 :(得分:0)
如果你必须多次这样做,我建议你从$ p类中的方法返回$ p中的属性数组并使用
array_diff($attributes, $p->getAttributes());
答案 1 :(得分:0)
这就是我最终做的事情:
$all_attributes = array("a", "b", "c", "d","e","f", "g","h" ,"i","j","k","l");
$attributes = array();
foreach($allpkg as $p) {
foreach($all_attributes as $key=> $a) {
if ($p->getAttribute($a) && (!in_array($a, $attributes))) {
array_push($attributes,$a);
}
}
}
编辑:解决方案已经编辑,因为我在问题本身的编辑...(aaawww,抱歉混淆)。 也许不是最优雅的,当然不是最有效的(复制所有需要的元素......)。但是我可以清楚地控制发生了什么,并且它有效:)