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