首页 / PHP / 如何找出PHP对象数组的差值?
如何找出PHP对象数组的差值?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何找出PHP对象数组的差值?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2714字,纯文字阅读大概需要4分钟。
内容图文
《深入PHP 面向对象、模式与实践》的159页有下面的代码。这儿是演示组合模式,removeUnit那个方法里用到了array_udiff函数。作者的本意是这样可以从 $units 属性里去除$unit 对象。我试了发现不起作用,关键就在$units参数里存的是对象,对象做比较时不能排序,所以就失败了。大家有没有好的方法可以从数组里排除掉一个对象吗?
class Army extends Unit{
private $units = array();
function addUnit(Unit $unit){
if(in_array($unit, $this->units, true)){
return;
}
$this->units[] = $unit;
}
function removeUnit(Unit $unit){
$this->units = array_udiff($this->units, array($unit), function ($a, $b) {
return ($a === $b) ? 0: 1;});
}
function bombardStrength(){
$ret = 0;
foreach($this->units as $unit){
$ret += $unit->bombardStrength();
}
return $ret;
}
}
$army = new Army;
$archer = new Archer();
//$archer->addUnit(new Archer);
$army->addUnit($archer);
$army->addUnit($archer);
$army->addUnit(new Archer);
$army->addUnit(new LaserCannonUnit);
$army2 = new Army();
$army2->addUnit(new Archer);
$army2->addUnit($archer);
$army2->addUnit($archer);
$army2->removeUnit($archer);
$army->addUnit($army2);
$army->addUnit($army2);
print_r($army);
echo $army->bombardStrength()."\n";
$army->removeUnit($army2);
$army->removeUnit($army2);
$army->removeUnit($army2);
$army->removeUnit($archer);
echo $army->bombardStrength();
print_r($army);
回复内容:
《深入PHP 面向对象、模式与实践》的159页有下面的代码。
这儿是演示组合模式,removeUnit那个方法里用到了array_udiff函数。作者的本意是这样可以从 $units 属性里去除$unit 对象。我试了发现不起作用,关键就在$units参数里存的是对象,对象做比较时不能排序,所以就失败了。大家有没有好的方法可以从数组里排除掉一个对象吗?
class Army extends Unit{
private $units = array();
function addUnit(Unit $unit){
if(in_array($unit, $this->units, true)){
return;
}
$this->units[] = $unit;
}
function removeUnit(Unit $unit){
$this->units = array_udiff($this->units, array($unit), function ($a, $b) {
return ($a === $b) ? 0: 1;});
}
function bombardStrength(){
$ret = 0;
foreach($this->units as $unit){
$ret += $unit->bombardStrength();
}
return $ret;
}
}
$army = new Army;
$archer = new Archer();
//$archer->addUnit(new Archer);
$army->addUnit($archer);
$army->addUnit($archer);
$army->addUnit(new Archer);
$army->addUnit(new LaserCannonUnit);
$army2 = new Army();
$army2->addUnit(new Archer);
$army2->addUnit($archer);
$army2->addUnit($archer);
$army2->removeUnit($archer);
$army->addUnit($army2);
$army->addUnit($army2);
print_r($army);
echo $army->bombardStrength()."\n";
$army->removeUnit($army2);
$army->removeUnit($army2);
$army->removeUnit($army2);
$army->removeUnit($archer);
echo $army->bombardStrength();
print_r($army);
直接循环和unset解决了。
foreach($this->units as $k => $u){
if($u === $unit){
unset($this->units[$k]);
}
}
内容总结
以上是互联网集市为您收集整理的如何找出PHP对象数组的差值?全部内容,希望文章能够帮你解决如何找出PHP对象数组的差值?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。