0

我有 2 个数组:

$oldValues = array(125 => 'hello', 126 => 'bye', 131 => 'hi', 141 => '');
$newValues = array(125 => 'hello world', 126 => 'bye', 131 => 'h', 141 => 'ABC');

现在更好地解释这一点,$oldValues在用户更改网站上的任何数据之前保留这些值。$newValues在用户保存更改后保存新值。

多个用户同时访问该页面,因此如果一个用户没有刷新页面并进行任何更改并单击保存,我希望能够显示该页面"Hey someone else has updated this settings before you did, wanna see the changes?"并且他们能够看到以下输出:

Field        Changed From          Changed To
125          hello                 hello world
131          hi                    h
141                                ABC

请注意,126由于没有更改,因此不包括在内。

我已经有使用 array_diff 的代码,但它似乎并不总是有效。

$allPossibleFields = array(125, 126, 131, 141);
$insertionDiff = array_diff($newValues, $oldValues);
$deletionDiff  = array_diff($oldValues, $newValues);

$returnArray = array();
foreach($allPossibleFields as $field) {
  if (isset($insertionDiff[$field])) {
      $returnArray[$field]['from'] = $oldValues[$field];
      $returnArray[$field]['to']   = $insertionDiff[$field];
  }

  if (isset($deletionDiff[$field])) {
      if ( ! isset($returnArray[$field]['from']))
      {
         $returnArray[$field]['from'] = $deletionDiff[$field];
      }

      if ( ! isset($returnArray[$field]['to']))
      {
         $returnArray[$field]['to']   = $newValues[$field];
      }
  }
}

但在某些情况下,当存在差异时它会返回空数组,并且在某些情况下它可以工作。我知道这里的某个地方有一个错误,但似乎找不到它。

4

1 回答 1

1

你可以让它比这简单得多;

foreach($oldValues as $key => $value) {
    if($value != $newValues[$key]) {
        echo "Field " . $key . " was changed from " . $value . " to " . $newValues[$key] . "<br />";
    }
}
于 2013-05-02T14:35:13.167 回答