У меня есть 2 массивы:Найти разность двух массивов и печати двунаправленная изменения PHP
$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];
}
}
}
но в некоторых случаях он возвращает пустой массив, когда есть разница, и в некоторых случаях он работает. Я знаю, что где-то здесь есть ошибка, но, похоже, она не находит ее.
Попробуйте использовать array_diff_assoc. Это сократит количество необходимого кода: http://www.php.net/manual/en/function.array-diff-assoc.php – Chad
Что такое значение $ fid? Разве это не '' поле? – ghost
да, это должно быть поле, которое только что изменилось. – GGio