要从对象数组中删除键/值,而不删除整个对象,你可以使用array_map
函数来遍历数组并删除指定的键/值对。以下是一个解决方案的示例代码:
function array_diff_key_value($array, $key, $value) {
return array_map(function($item) use($key, $value) {
unset($item->$key);
return $item;
}, $array);
}
// 示例用法
$objects = [
(object)['id' => 1, 'name' => 'John'],
(object)['id' => 2, 'name' => 'Jane'],
(object)['id' => 3, 'name' => 'Bob']
];
$objects = array_diff_key_value($objects, 'name', 'Jane');
// 输出结果
print_r($objects);
在上面的示例中,我们定义了一个名为array_diff_key_value
的函数,它接受一个对象数组、要删除的键和要删除的值作为参数。内部使用array_map
函数来遍历数组,并在每个对象中使用unset
函数删除指定的键/值对。最后,我们将修改后的对象数组返回。
在示例用法中,我们创建了一个包含三个对象的数组。然后,我们调用array_diff_key_value
函数来删除name
键为Jane
的对象。最后,我们打印修改后的对象数组,你会看到name
为Jane
的对象已被删除。