如何:从具有特定属性值的数组中删除对象并生成新数组作为结果

Sul*_*rat 1 php arrays foreach

我有一个数组,如:

Array
(
[0] => stdClass Object
(
[id] => 227
[catid] => 10
)
[1] => stdClass Object
(
[id] => 228
[catid] => 29
)
[2] => stdClass Object
(
[id] => 229
[catid] => 11
)
[3] => stdClass Object
(
[id] => 230
[catid] => 29
)
)
Run Code Online (Sandbox Code Playgroud)

现在我尝试根据 catid 从数组中删除一些对象:

foreach ($myarray as $item) {
    if ($myarray->catid != 29) unset($item);
}
Run Code Online (Sandbox Code Playgroud)

但是如何从 foreach 上面创建新数组?基本上我想要一个只包含 catid = 29 的对象的新数组:

Array
(
[0] => stdClass Object
(
[id] => 228
[catid] => 29
)
[1] => stdClass Object
(
[id] => 230
[catid] => 29
)
)
Run Code Online (Sandbox Code Playgroud)

Don*_*nic 5

可以使用array_filter获取仅具有特定 catid 的值;

$filtered = array_filter($myarray, function($item){ return $item->catid === 29; });
Run Code Online (Sandbox Code Playgroud)

但这不会从原始数组中删除对象。要同时执行这两项操作,您只需将操作添加到循环中即可。

foreach ($myarray as $key => $value) {
    if ($value->catid == 29) {
        $new_array[] = $value;
        unset($myarray[$key]);        
    }
}
Run Code Online (Sandbox Code Playgroud)