如果满足某个条件,我试图删除多维数组的片段。该数组可以如下所示,称之为$ 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也行不通,因为它是更高级别的数组。有任何想法吗?谢谢。
答案 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
更清晰,更准确。