PHP - Object Array Intersect и Merge сохраняют объект без изменений - PullRequest
0 голосов
/ 01 октября 2018

У меня есть многомерный массив, содержащий массив объектов, возвращаемых из БД:

Array
(
    [0] => Array
        (
            [0] => stdClass Object
                (
                    [image_id] => 1
                )

            [1] => stdClass Object
                (
                    [image_id] => 5
                )

            [2] => stdClass Object
                (
                    [image_id] => 6
                )

            [3] => stdClass Object
                (
                    [image_id] => 7
                )
        )
    [1] => Array
        (
            [0] => stdClass Object
                (
                    [image_id] => 5
                )

            [1] => stdClass Object
                (
                    [image_id] => 6
                )
        )
    [2] => Array
        (
            [0] => stdClass Object
                (
                    [image_id] => 5
                )
        )
)

Мне нужно иметь возможность пересекать вложенные массивы, чтобы сохранить только те image_id, которые присутствуют во всех наборах массивов.Таким образом, в приведенном выше примере это только вернет image_id = 5.

Мне нужно сохранить это как массив объектов, который выглядит следующим образом:

Array
(
    [0] => stdClass Object
        (
            [image_id] => 5
        )
)

Я пробовал некоторый код из других сообщений,Это похоже на php - массив пересекается и сливается , однако они пытаются удалить дубликаты, что немного отличается от случая.

Все случаи, которые я видел при сравнении массивов, - это то, где массивы известны (т. Е. $arr1, $ arr2).пользовательский случай для этого может быть множественным массивом любой длины.

Любая помощь будет цениться, так как были круглыми кругами, пытающимися найти решение.

Заранее спасибо

1 Ответ

0 голосов
/ 01 октября 2018

Сначала нам нужно перебрать image_ids и получить дубликаты.Затем нам нужно перестроить необходимую структуру.

<?php

$test_array = [
    [
        (object)['image_id' => 1],
        (object)['image_id' => 2],
        (object)['image_id' => 3],
        (object)['image_id' => 4],
        (object)['image_id' => 5],
    ],
    [
        (object)['image_id' => 2],
        (object)['image_id' => 3],
    ],
    [
        (object)['image_id' => 1],
        (object)['image_id' => 2],
        (object)['image_id' => 3],
    ]
];


$first_iteration = true;
$duplicates = [];

foreach ($test_array as $outer_key => $outer_array) {

    $current_array_values = [];
    foreach ($outer_array as $image_id) {
        $current_array_values[] = $image_id->image_id;
    }

    // If first iteration, then we will have
    // no IDs to check against.
    if ($first_iteration) {
        $duplicates = $current_array_values;
        $first_iteration = false;
    } else {
        $duplicates = array_intersect($duplicates, $current_array_values);
    }   
}

$output = [];
foreach($duplicates as $duplicate) {
    $output[] = (object)['image_id' => $duplicate];
}

$ output:

array(2) {
  [0]=>
  object(stdClass)#11 (1) {
    ["image_id"]=>
    int(2)
  }
  [1]=>
  object(stdClass)#12 (1) {
    ["image_id"]=>
    int(3)
  }
}

Дайте мне знать, если у вас есть какие-либо проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...