我正在尝试合并来自不同对象的一组数组。假设我有这样的设置:
class Base {
static $defaults = array (
'time' => 'DEFAULT',
'color' => 'DEFAULT',
'friend' => 'DEFAULT',
'pub' => 'DEFAULT',
'money' => 'DEFAULT',
);
static function isDefault ( $key, $value ) {}
$properties;
}
class A extends Base {
function __construct() {
$data = array( 'time' => '6pm', 'friend' => 'Jack' );
$this->properties = array_merge( self::$defaults, $data );
};
class B extends Base {
function __construct() {
$data = array( 'pub' => 'The Lion', 'friend' => 'Jane' );
$this->properties = array_merge( self::$defaults, $data );
};
}
class C extends Base {
function __construct() {
$data = array( 'money' => 'none', 'pub' => 'Queens' );
$this->properties = array_merge( self::$defaults, $data );
};
}
$sequence = array( new A, new B, new C );
我所知道的是对象是顺序的,并且存在一个名为properties
的数组。我想合并这些数组,以便结果如下:
array (
'time' => '6pm',
'color' => 'DEFAULT',
'friend' => 'Jack',
'pub' => 'The Lion',
'money' => 'none',
)
我希望存储第一个无默认值。这样做的快速方法是什么?
答案 0 :(得分:1)
第1步:定义isDefault
static function isDefault ( $key, $value ) {
return($value == self::$defaults[$key]);
}
第2步:循环。
<?php
$result = array();
foreach($sequence AS $object){
foreach($object->properties AS $key=>$value){
if(!isset($result[$key]) || Base::isDefault($key, $result[$key])){
$result[$key] = $value;
}
}
}
var_dump($result);
小提琴:http://phpfiddle.org/main/code/anh-hrc
结果是:
array(5) {
["time"]=> string(3) "6pm"
["color"]=> string(7) "DEFAULT"
["friend"]=> string(4) "Jack"
["pub"]=> string(8) "The Lion"
["money"]=> string(4) "none"
}