php two Разница в многомерном массиве

0

Я работаю с двумя многомерными разностями в массиве: мой массив:

Array1:

Array
(
    [0] => Array
        (
            [F_CONTACT_ID] => 2
            [F_CONTACT_FNAME] => name2
            [F_CONTACT_NAME] => name22
        )

    [1] => Array
        (
            [F_CONTACT_ID] => 3
            [F_CONTACT_FNAME] => name3
            [F_CONTACT_NAME] => name33
        )

)

array2:

Array
(
    [0] => Array
        (
            [F_CONTACT_ID] => 2
            [F_CONTACT_FNAME] => name2
            [F_CONTACT_NAME] => name22
        )

    [1] => Array
        (
            [F_CONTACT_ID] => 3
            [F_CONTACT_FNAME] => name3
            [F_CONTACT_NAME] => name33
        )

    [2] => Array
        (
            [F_CONTACT_ID] => 5
            [F_CONTACT_FNAME] => name5
            [F_CONTACT_NAME] => name55
        )

)

Я просто хочу сравнить сравнение с "F_CONTACT_ID" в массиве.

Мой результирующий массив должен быть:

Результат:

Array
(
    [2] => Array
        (
            [F_CONTACT_ID] => 5
            [F_CONTACT_FNAME] => name5
            [F_CONTACT_NAME] => name55
        )
)

Также, если один массив пуст: предположим, что Array2 пуст. Мой массив результатов должен быть:

Array
(
    [0] => Array
        (
            [F_CONTACT_ID] => 2
            [F_CONTACT_FNAME] => name2
            [F_CONTACT_NAME] => name22
        )

    [1] => Array
        (
            [F_CONTACT_ID] => 3
            [F_CONTACT_FNAME] => name3
            [F_CONTACT_NAME] => name33
        )

)

Я пробовал с разными решениями, но ничего не работало для меня. Я попытался восстановить F_CONTACT_ID и сохранить его в одномерном массиве и сравнить, но потребовалось много времени. Пожалуйста, помогите мне в лучшем и быстром решении.

  • 1
    Эта ссылка может вам помочь .. stackoverflow.com/questions/12246039/…
  • 0
    @next2u next2u это не работает с моим условием, я пытался. :(
Теги:
arrays
compare

3 ответа

1
Лучший ответ

Вы пробовали это?

for($i=0;$i<count($array1);$i++) {
    $temp[$array1[$i]['F_CONTACT_ID']] = $array1[$i];
};

for($i=0;$i<count($array2);$i++) {
    if($temp[$array2[$i]['F_CONTACT_ID']]) {
        unset($temp[$array2[$i]['F_CONTACT_ID']]);
    } else {
        $temp[$array2[$i]['F_CONTACT_ID']] = $array2[$i];
    }
}

echo "<pre>";
print_r($temp);
echo "</pre>";

Результатом будет следующее:

Array
(
    [5] => Array
        (
            [F_CONTACT_ID] => 5
            [F_CONTACT_FNAME] => name5
            [F_CONTACT_NAME] => name55
        )

)
0

как насчет чего-то подобного?

$array1;
$array2;

$array3;
foreach ($array1 as $ar1) {
    foreach ($array2 as $ar2) {
        if ($ar1['F_CONTACT_ID']==$ar2['F_CONTACT_ID']) {
            array_push($array3, $ar1);
        }
    }
}

он не очень оптимизирует, чтобы максимизировать изменение производительности во второй проверке foreach, если array_push уже добавлен (используя условие bool)

  • 0
    Нет! Я прошел через это долгое время назад!
  • 0
    почему это не работает для вас? объяснять
Показать ещё 1 комментарий
0

Вы можете попробовать функцию array-diff-key(), которая поможет вам сравнить два многомерных массива с помощью клавиш.

Вы можете посетить эту страницу для получения дополнительной информации: http://php.net/manual/en/function.array-diff-key.php

Ещё вопросы

Сообщество Overcoder
Наверх
Меню