我有2列:找到兩個數組的差和打印雙向改變PHP
$oldValues = array(125 => 'hello', 126 => 'bye', 131 => 'hi', 141 => '');
$newValues = array(125 => 'hello world', 126 => 'bye', 131 => 'h', 141 => 'ABC');
現在來解釋這個好一點,$oldValues
持有價值用戶更改網站上的任何數據之前。 $newValues
保存用戶保存更改後的新值。
多個用戶在同一時間訪問該頁面,所以如果一個用戶didnt刷新頁面,進行任何更改,並點擊保存我希望能夠以顯示"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];
}
}
}
但在某些情況下,它會在有差異並且在某些情況下可以工作時返回空數組。我知道這裏有一個bug,但似乎找不到它。
嘗試使用array_diff_assoc。它會減少需要的代碼量:http://www.php.net/manual/en/function.array-diff-assoc.php – Chad 2013-05-02 14:37:20
什麼是'$ fid'值?它不應該是'$ field'嗎? – ghost 2013-05-02 14:39:42
是的,它應該是剛剛更改的字段 – GGio 2013-05-02 14:40:30