У меня есть два массива, например $session и $post со 100+ значениями. Я сравню значения массива $post с массивом $session. Если сообщение отличается, оно будет перенесено в массив результатов, иначе нет.
Мы можем попробовать это с помощью array_diff_assoc($post, $session) and foreach(). Какой из них быстрее?
Почему бы вам не попробовать и не посмотреть, что быстрее ~ Самый простой способ профилировать PHP-скрипт
@Phil Я пробовал. PHP_functions выглядит медленнее, чем foreach ()






Для профилирования Фил в своем ответе предложил отличный способ, но на всякий случай я также свяжу его здесь: Самый простой способ профилировать PHP-скрипт
На практике вам нужно знать, что делает каждый подход. в array_diff_assoc вы возвращаете разницу между двумя коллекциями после сравнения пар ключ / значение для каждого элемента. Затем он вернет массив, содержащий записи из array1, которых нет в array2 или array3, и т. д.
В каждом цикле вам нужно будет жестко закодировать одну и ту же функцию (при условии, что это то, что вам нужно). Вам нужно будет взять первый элемент, а затем искать комбинацию в других массивах. Если он соответствует вашим требованиям, вы сохраните его в выходной массив или даже распечатаете напрямую.
Применяются те же принципы, но, опять же, определение более быстрого подхода зависит от профилирования. Попробуйте сделать это на большом количестве больших массивов, так как в меньших масштабах разница не заметна.
Я оставлю это как заглушку / пример, пожалуйста, отредактируйте или используйте для профилирования.
<?php
$before = [
'name' => 'Bertie',
'age' => '23'
];
$after = [
'name' => 'Harold',
'age' => '23',
'occupation' => 'Bus driver'
];
function changed_1($after, $before) {
return array_diff_assoc($after, $before);
}
function changed_2($after, $before) {
$changed = [];
foreach($after as $k => $v) {
if (isset($before[$k]) && $before[$k] !== $v)
$changed[$k] = $v;
if (!isset($before[$k]))
$changed[$k] = $v;
}
return $changed;
}
var_export(changed_1($after, $before));
var_export(changed_2($after, $before));
Выход:
array (
'name' => 'Harold',
'occupation' => 'Bus driver',
)array (
'name' => 'Harold',
'occupation' => 'Bus driver',
)
Я поместил здесь код 3v4l.org/pS8uc с более чем 4000 записями с разными значениями (худший случай). Игнорируйте результаты их оценщика и исследуйте себя или профилируйте по-другому. Для меня array_diff_assoc быстрее.
Что за вопрос здесь?