@Kristina8787

Как найти все дубликаты в многомерном массиве?

Здравствуйте. Всю голову уже сломала, задача у меня такая, есть N-ое кол-во людей, у них у каждого есть допустим по 10 телефонных номеров, надо найти все номера которые повторяются среди людей, вот пример массива
$data = [
	'alex' => [
		"1111111",
		"2222222",
		"1726354"
	],
	'john' => [
		"1111111",
		"3333333",
		"7162534"
	],
	'michel' => [
		"1111111",
		"453453453",
		"3333333"
	]
] ;


не могу понять как мне вложенные в один массивы так прогнать и сравнить, задача допускает что людей может быть даже миллион,поэтому грубо циклами одними нельзя действовать. Подскажите где копать, а лучше научите)
  • Вопрос задан
  • 534 просмотра
Решения вопроса 1
@dimoff66
Кратко о себе: Я есть
Если предположить что пользоваться методами работы с массивами вы умеете, то алгоритмически решение будет выглядить так:

1) Сделайте массив плоским
[
  ['alex', '111111'],
  ['alex', 2222222],
  ...
]


2) Сгруппируйте по номеру телефона, чтобы получилось
[
  '111111' => ['alex', 'john'],
  '222222' => ['alex']
  ...
]


3) Отфильтруйте элементы где значение имеет больше одного элемента.

Задача сделана

UPDATE:
Простой код

$data = [
  'alex' => [
    "1111111",
    "2222222",
    "1726354"
  ],
  'john' => [
    "1111111",
    "3333333",
    "7162534"
  ],
  'michel' => [
    "1111111",
    "453453453",
    "3333333"
  ]
] ;

$res = [];
foreach ($data as $name => $phones) {
    foreach($phones as $phone) {
        if (!array_key_exists($phone, $res)) {
            $res[$phone] = [];
        }
        $res[$phone][] = $name;
    }    
}

print_r($res)


Array
(
    [1111111] => Array
        (
            [0] => alex
            [1] => john
            [2] => michel
        )

    [2222222] => Array
        (
            [0] => alex
        )

    [1726354] => Array
        (
            [0] => alex
        )

    [3333333] => Array
        (
            [0] => john
            [1] => michel
        )

    [7162534] => Array
        (
            [0] => john
        )

    [453453453] => Array
        (
            [0] => michel
        )

)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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