@SergeyZelensky-Rostov

Как сравнить массивы php?

есть функция которая вызывается в цикле и делает массив вида
array('a1'=>array(....),'a2'=>array(....) ...'aN'=>array(....));

так вот эта функция вызывается к примеру 5 раз ,и мне необходимо сравнить каждый массив который она сделала с остальными и привести к их виду(т.е. если есть ключ в других то добавить его в текущий, и значение установить 0 )
я не прощу писать решение, просто поделитесь опытом, единственно что мне пришло в голову это сделать буфер(массив), и при каждом вызове функции писать туда созданный массив, а потом с помощью этого буфера их и проверять, но как то это очень ресурсоёмко получается, подскажите методы решения
  • Вопрос задан
  • 6879 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Алгоритм такой:
1. Проитерировать все 5 массивов, записать ключи в отдельный массив.
2. Выбросить все неуникальные ключи.
3. Проитерировать этот отдельный массив и внутри цикла проверить наличие ключа в каждом из 5 массивов, если ключа нет - добавить с дефолтным значением.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
function fill_array_diff(array $array1, array $array2) {
    $diff = array_keys(array_diff_key($array1, $array2));

    return array_merge($array2, array_fill_keys($diff, 0));
}

// Массив с которым сравниваем
$mainArray = ['a1' => 100, 'a2' => 200, 'a100' => 300, 'a200' => 400];

// Массив который сравниваем
$array = ['a1' => 1,'a2' => 2, 'a3' => 3];

$array = fill_array_diff($mainArray, $array);

var_export($array);
/*
array (
'a1' => 1,
  'a2' => 2,
  'a3' => 3,
  'a100' => 0,
  'a200' => 0,
)*/
Ответ написан
Комментировать
@skvot
Просто сравнение оператором сравнения?
array_diff()?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы