0

我正在这样做:

 $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]);
      }
     }
    }

但是未设置似乎会缩小$attributes循环中的数组,然后取消设置想要的值。

编辑:这不是发生的事情。真正的问题是,由于这些是嵌套循环,如果!$p->getAttribute($a)返回 false,我不应该已经在数组中取消设置它,因为第一个循环foreach($all as $p)可能会为 $p 提供一个返回 true 的属性,因此需要保留。

我需要它,这样如果!$p->getAttribute($a)我想从 $attributes 中删除相应的 $a。最有效的方法是什么?

4

2 回答 2

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,抱歉混淆)。也许不是最优雅的,当然也不是最有效的(复制所有需要的元素......)。但我对正在发生的事情有明确的控制,并且它有效:)

于 2012-12-07T15:24:44.810 回答
0

如果你必须多次这样做,我建议你从 $p 类中的方法返回属性数组并使用

array_diff($attributes, $p->getAttributes());
于 2012-12-06T23:11:12.000 回答