@aheles

Php как проверить два многомерных массива по id и вывести true?

Есть два массива, которых ключи нужно сравнить
Например:
Первый массив:
1 => ([ID] => 16818
    [XML_ID] => 1
    [DATE_CREATE] => Bitrix\Main\Type\DateTime Object
        (
            [value:protected] => DateTime Object
                (
                    [date] => 2021-12-06 17:43:31.000000
                    [timezone_type] => 3
                    [timezone] => Europe/Moscow
                )

        )

    [USER_ID] => 9592
    [PRICE] => 1
    [PAYED] => 1
    [DATE_PAYED] => Bitrix\Main\Type\DateTime Object
        (
            [value:protected] => DateTime Object
                (
                    [date] => 2021-12-06 17:43:31.000000
                    [timezone_type] => 3
                    [timezone] => Europe/Moscow
                )

        )

    [ENTITY_TYPE] => 1
    [ENTITY_ID] => 14029
    [HASH] => 5d41e929c6ebf58b493676708d959738
    [PAID_ANOTHER] => 1
    [INFORMATION_PAID_ANOTHER] => )


и второй массив:
(
    [id] => 16819
    [price] => 1
    [xmlId] => 1
    [date] => Mon 06th Dec 2021 - 17:43
    [datePayed] => Mon 06th Dec 2021 - 17:43
    [payed] => 1
    [paidAnother] => 1
    [informationPaidAnother] => 
)


и нужно сравнить, пройтись по всем ключам ВО ВТОРОМ массиве, и вывести, есть ли ID каждого ключа В ПЕРВОМ массиве, если во втором массиве и в первом ID существуют, то вывести true, если во втором существует ID, но в первом массиве такого ID нет, то вывести false.

Сам пытался сделать через два foreach, но не получается.
foreach ($tsListAll as $key => $tsListCurAll) {
            $transaction = [];
            $conditionDelete = true;
            foreach ($tsListCur as $tsCur) {
                if ($tsListCurAll['ID'] == $tsCur->id) {
                    $conditionDelete = false;
                }
            }
            if ($conditionDelete == true) {
                echo 'true'
            } else {
                echo 'false'
            }
        }
  • Вопрос задан
  • 71 просмотр
Пригласить эксперта
Ответы на вопрос 1
Immortal_pony
@Immortal_pony Куратор тега PHP
Сдаётся мне, здесь путаница в терминологии.
Магический шар мне подсказывает, что ситуация такая. У нас есть два численно индексированных массива, каждый элемент которых представляет собой ассоциативный массив определённого формата. Формат ассоциативных массивов одинаков для всех элементов каждого из численно индексированных массивов.

Тогда код будет примерно таким:

foreach ($secondArray as $secondArrayElement) {
    $secondArrayElement = (array)$secondArrayElement;  // вы везде пишете "массив", но, судя по вашему примеру, у вас тут объект, а не массив. Поэтому я сделал явное преобразование в массив на случай если была ошибка в формулировке.
    $doesExistInFirstArray = false;

    foreach ($firstArray as $firstArrayElement) {
        if ($firstArrayElement['ID'] == $secondArrayElement['id']) {
             $doesExistInFirstArray = true;
             break;
        }
    }

    $secondArrayElement['doesExistInFirstArray'] = $doesExistInFirstArray;
}


Код добавит каждому элементу второго массива информацию о том, существует и аналогичный элемент в первом массиве.

Уточните, этого ли вы хотели? Если нет, то постарайтесь разобраться в терминолоии и задать вопрос правильно.
Сейчас он звучит как полнейшая чушь.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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