是否有函数比较2个不同的关联数组,并返回更改?比较2个数组
例如
$age = array("Peter"=>"35","Ben"=>"37","Joe"=>"");
$age2 = array("Peter"=>"38","Ben"=>"37","Joe"=>"43");
回报
$return = array(
"Peter"=>"Changed from 35 to 38",
"Joe"=>"Changed from blank to 43"
);
是否有函数比较2个不同的关联数组,并返回更改?比较2个数组
例如
$age = array("Peter"=>"35","Ben"=>"37","Joe"=>"");
$age2 = array("Peter"=>"38","Ben"=>"37","Joe"=>"43");
回报
$return = array(
"Peter"=>"Changed from 35 to 38",
"Joe"=>"Changed from blank to 43"
);
正如前面所指出的,array_diff_assoc
是你的出发点。其余的正在建设的字符串每个区别:
function compareAge($age, $age2)
{
$return = array();
foreach(array_keys(array_diff_assoc($age, $age2)) as $diffKey) {
$from = empty($age[$diffKey]) ? 'blank' : $age[$diffKey];
$to = empty($age2[$diffKey]) ? 'blank' : $age2[$diffKey];
$return[$diffKey] = "Changed from {$from} to {$to}";
}
return $return;
}
这很好,有没有一种方法来包括名称以及前。 “乔从20变为空”? – kajab 2013-03-18 15:55:54
在循环中,“Joe”将在'$ diffKey'中,所以:是。 – 2013-03-18 16:01:51
array_diff可以在正确的道路上开始你。尽管它没有提供你正在寻找的确切输出,但它会显示两个数组之间的差异。
正如标记指出的那样,array_diff_assoc可能更有帮助,因为它维护数组索引。
array_diff_assoc()可能更有用 – 2013-03-18 15:32:34
没有默认情况下,我有我的手一段时间:) http://codepad.org/2UtrPE3o
<?
$age = array("Peter"=>"35","Ben"=>"37","Joe"=>"");
$age2 = array("Peter"=>"38","Ben"=>"37","Joe"=>"43");
$result = array();
foreach($age as $key=>$val) {
if (array_key_exists($key, $age2)) {
if ($val!==$age2[$key])
$result[$key] = 'Changed from '.(empty($val)?'blank':$val).' to '. (empty($age2[$key])?'blank':$age2[$key]);
} else {
$result[$key] = 'Changed from '.(empty($val)?'blank':$val).' to blank';
}
}
foreach($age2 as $key=>$val) {
if (!array_key_exists($key, $age)) {
$result[$key] = 'Changed from blank to ' . $val;
}
}
var_dump($result);
?>
检查这一点,更有效的解决方案:
$age1 = array("Peter"=>"35","Ben"=>"37","Joe"=>"");
$age2 = array("Peter"=>"38","Ben"=>"37","Joe"=>"43");
$result = array_diff_assoc($age1, $age2);
$res = array();
foreach($result as $key=>$val){
$res[$key] = "Changed from ".($val?$val:"Balnk")." to ".($age2[$key]?$age2[$key]:"blank");
}
echo "<pre>";
print_r($res);
没有返回喜欢你想要的结果。 – Pitchinnate 2013-03-18 15:29:09