#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
и документы