- Автор темы
- #1
Здравствуйте.
Суть:
Как получить данные, что во второй записи был добавлено 2 массива и убран 1?
То есть информирование и в случае добавления, и в случаи удаления.
Мне нужно получить именно массивы, а не элементы (слова).
Первая мысль, которая была у меня - это добавить в массив md5 каждую строку и сравнивать с помощью array_diff_assoc, но уже md5. Но я предполагаю, что это не совсем правильное решение, так как перевод каждой строки в md5 будет занимать время и память. Может быть есть какое-нибудь встроенное решение или более оптимизированное?
На данный момент у меня вот так:
оно работает, только мне кажется, что это не совсем правильно
Суть:
Как получить данные, что во второй записи был добавлено 2 массива и убран 1?
То есть информирование и в случае добавления, и в случаи удаления.
Мне нужно получить именно массивы, а не элементы (слова).
PHP:
$a1 = array(
['витамин С', 'витамин Б', 'Сахар'],
['цинк', 'витамин Б'], // удалён
['медь', 'Сахар', 'войлок'],
['Кальций', 'Магний', 'Железо'],
['Кислота', 'Витамин К', 'Витамин Е']
);
$a2 = array(
['витамин С', 'витамин Б', 'Сахар'],
['медь', 'Сахар', 'войлок'],
['Кальций', 'Магний', 'Железо'],
['Кислота', 'Витамин К', 'Витамин Е'],
['Лимонад', 'витамин Б'], // добавлен
['Заяц', 'витамин Б', 'Кролик'], // добавлен
);
Первая мысль, которая была у меня - это добавить в массив md5 каждую строку и сравнивать с помощью array_diff_assoc, но уже md5. Но я предполагаю, что это не совсем правильное решение, так как перевод каждой строки в md5 будет занимать время и память. Может быть есть какое-нибудь встроенное решение или более оптимизированное?
На данный момент у меня вот так:
PHP:
$a1 = array(
['111', '111', '111'],
['222', '222'],
['333', '333', '333'],
);
$a2 = array(
['111', '111', '111'],
['333', '333', '333'],
['444', '444', '444'],
);
$new_a1 = array();
$new_a2 = array();
foreach ($a1 as $value) {
$hash = md5(json_encode($value));
$new_a1[$hash] = $value;
}
foreach ($a2 as $value) {
$hash = md5(json_encode($value));
$new_a2[$hash] = $value;
}
$added = array_diff_assoc($new_a2,$new_a1);// Добавлено
$remove = array_diff_assoc($new_a1,$new_a2);// Удалено
vardump($added);
echo "<br>";
vardump($remove)