Как я могу проверить, нет ли массива объектов со значениями id в другом массиве объектов в php? - PullRequest
0 голосов
/ 31 октября 2019

У меня есть два массива объектов, таких как

$array1 = [{id: '12',amount:'23'},{id:'10',amount:'129'},{id:'8', amount:'47'}];

$array2 = [{id: '3', date:'23'},{id:'4', date:'12'},{id:'6', date:'21'}];

Я хочу проверить все id (12,10,8) первого массива во второй. если эти идентификаторы отсутствуют в массиве 2. это будет var_dump('not matched').

Я пытался сделать это, но когда элемент fist не совпал, он был остановлен для дальнейшей итерации и отображения статуса «не найден».


 foreach ($array1 as $value) {
            foreach ($array2 as $value2) {
                if ($value['id'] !== $value2['id']) {
                   var_dump('not found');
                }
            }
        }

Я ожидаю показать выходной результат после выполнения всех итераций.

Ответы [ 3 ]

1 голос
/ 31 октября 2019

Вы можете использовать array_diff с array_column

if(!array_diff(array_column($array1, 'id'), array_column($array2, 'id'))){
  echo 'Not matched';
}
0 голосов
/ 31 октября 2019

Спасибо за помощь, но я только что нашел решение, я использую счетчик итераций цикла. Он подсчитывает номер итерации и проверяет, что он завершает всю итерацию в соответствии с длиной массива.

foreach ($array1 as $value) {
            $notFound = 0;
            foreach ($array2 as $value2) {
                if ($value['id'] === $value2['id']) {
                       var_dump('match found')
                    }
                } else {
                    $notFound++;
                }
            }

            if ($notFound === count($array2)) {
               var_dump('not found')
            }
        }

0 голосов
/ 31 октября 2019
<?php
  // JSON string

  $array1 = '[{"id": "12","amount":"23"},{"id":"10","amount":"129"},{"id":"8", "amount":"47"}]';
  $array2 ='[{"id": "3","amount":"23"},{"id":"4","amount":"12"},{"id":"6", "amount":"21"}]';

  // Convert JSON string to Array
  $someArray1 = json_decode($array1, true);
  $someArray2 = json_decode($array2, true);
  print_r($someArray1);
  print_r($someArray2);       

     foreach ($someArray1 as $value) {
                foreach ($someArray2 as $value2) {
                    if ($value['id'] !== $value2['id']) {
                       echo "not found";"<br>";
                    }
                }
            }
        ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...