有效地删除数组PHP中的项目

时间:2012-12-06 23:03:56

标签: php arrays

我这样做:

 $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。什么是最有效的方法?

2 个答案:

答案 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,抱歉混淆)。 也许不是最优雅的,当然不是最有效的(复制所有需要的元素......)。但是我可以清楚地控制发生了什么,并且它有效:)