如何从php中的多维数组中删除特定索引

时间:2014-11-07 07:52:17

标签: php arrays multidimensional-array

如果满足某个条件,我试图删除多维数组的片段。该数组可以如下所示,称之为$ friends:

array (size=3)
  0 => 
    array (size=1)
      0 => 
        object(stdClass)[500]
          public 'id' => int 2
          public 'first_name' => string 'Mary' (length=4)
          public 'last_name' => string 'Sweet' (length=5)
  1 => 
    array (size=1)
      0 => 
        object(stdClass)[501]
          public 'id' => int 9
          public 'first_name' => string 'Joe' (length=3)
          public 'last_name' => string 'Bob' (length=3)
  2 => 
    array (size=1)
      0 => 
        object(stdClass)[502]
          public 'id' => int 1
          public 'first_name' => string 'Shag' (length=4)
          public 'last_name' => string 'Well' (length=4)

我有一个名为is_followed的函数,让我看看数组中其中一个人的id是否被“user”跟随。我正在尝试的代码是:

//remove followed friends from the $friends array
$i=0;
foreach($friends as $friend) {
    foreach($friend as $f) {
        if(Fanfollow::is_followed($id,$f->id)) {
            unset($friend[$i]);
        }
    }
    $i++;
}

$ id是当前用户的ID。

但是,这不起作用。我知道在$friend而不是$friends上使用未设置可能是个问题。但是在$ friends上使用unset也行不通,因为它是更高级别的数组。有任何想法吗?谢谢。

2 个答案:

答案 0 :(得分:1)

如果您尝试取下第一个父键,请改用第一个foreach键:

foreach($friends as $i => $friend) {
                //  ^ assign a key
    foreach($friend as $f) {
        if(Fanfollow::is_followed($id,$f->id)) {
            unset($friends[$i]);
            // unset this
        }
    }
}

或者仅限于那位朋友:

foreach($friends as $friend) {
    foreach($friend as $i => $f) {
                  //   ^ this key
        if(Fanfollow::is_followed($id,$f->id)) {
            unset($friend[$i]);
            // unset this
        }
    }
}

答案 1 :(得分:1)

array_filter来救援:

array_filter($friend, 
  function($f) use($id) { return Fanfollow::is_followed($id,$f->id)); }
);

虽然foreach的解决方案是合法的,array_filter更清晰,更准确。