разница в массиве

#php #arrays

#php #массивы

Вопрос:

Мне нужно получить разницу между этими двумя массивами, я пытался array_diff($array1,$array2) безуспешно, есть идеи?

array1

 Array
(
    [0] => Array
        (
            [status] => 61192106047320064
        )

    [1] => Array
        (
            [status] => 61185038284357632
        )

    [2] => Array
        (
            [status] => 61182890951720960
        )

)
  

array2

 Array
(
    [0] => Array
        (
            [status] => 61185038284357632
        )

    [1] => Array
        (
            [status] => 61182890951720960
        )

)
  

заранее спасибо.

Комментарии:

1. Определите разницу, нужны ли вам все различия или, если array1 [0] == array2 [0], вам нужно напечатать разницу. Покажите какой-нибудь код, который вы пробовали. Каков ваш алгоритм поиска в массивах…

2. Как именно вы определяете разницу? Разница в наборе, симметричная разница, должны ли элементы иметь одинаковое расположение массива, …? Каким вы ожидаете быть результат?

3. первый массив содержит свежие результаты, второй предназначен для сравнения значений, а не индекса, мне нужно получить разницу между массивами и поместить результат в БД, ожидая [status] => 61192106047320064 из массива fisrt.

4. Проверьте комментарии на php.net/manual/en/function . array-diff.php для многомерного массива diff.

5. В чем проблема с array_diff?

Ответ №1:

Возможно, я неправильно понимаю, но не могли бы вы просто сделать что-то подобное для вашей конкретной проблемы?

 $newStatuses = array();

foreach($array1 as $element1) {
    foreach($array2 as $element2) {
        if($element1['status'] == $element2['status']) {
            continue 2;
        }
    }

    $newStatuses[] = $element1;
}
  

Каждый элемент $newStatuses будет представлять собой массив с элементом ‘status’ из массива 1, которого не было в массиве 2.

Итак, $ newStatuses будет таким:

 Array
(
    [0] => Array
        (
            [status] => 61192106047320064
        )

)
  

Ответ №2:

Согласно array_diff,

Эта функция проверяет только одно измерение n-мерного массива. Конечно, вы можете проверить более глубокие измерения, используя array_diff($array1[0], $array2[0]);.

Следовательно, вы не можете напрямую различать второе измерение этих массивов.

Вместо этого, возможно, вы можете извлечь status значения с помощью array_map, сохранить в виде двух одномерных массивов, а затем array_diff . Если у вас есть несколько ключей, используйте цикл for.

Ответ №3:

взгляните на этот код, это часть cakephp, но, возможно, вы сможете его адаптировать / удалить

https://github.com/cakephp/cakephp/blob/master/cake/libs/set.php#L792

и документы

http://book.cakephp.org/view/1496/diff