繁体   English   中英

比较2个数组

[英]Compare 2 arrays

有没有一个功能可以比较两个不同的关联数组,并返回更改?

例如

$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可能会在正确的路径上启动您。 尽管它没有提供您要查找的确切输出,但可以显示两个数组之间的差异。

就像马克指出的那样, array_diff_assoc可能会更有用,因为它可以维护数组索引。

如前所述, 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;
}

工作演示

没有任何默认设置,我有一些时间:) 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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM