Задать вопрос
@frmax
человек

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

Привет.

Как сравнить лучше всего много многомерных массивов?
К примеру:

array:5 [▼
  "cool" => array:4 [▼
    0 => "c"
    1 => "o"
    2 => "o"
    3 => "l"
  ]
  "looc" => array:4 [▼
    0 => "l"
    1 => "o"
    2 => "o"
    3 => "c"
  ]
  "test" => array:4 [▼
    0 => "t"
    1 => "e"
    2 => "s"
    3 => "t"
  ]
  "set" => array:3 [▼
    0 => "s"
    1 => "e"
    2 => "t"
  ]
  "get" => array:3 [▼
    0 => "g"
    1 => "e"
    2 => "t"
  ]
]


есть вот такой массив, нужно сравнить все элементы и сгрупировать что должно получиться в итоге...
[
          [
              'cool',
              'looc'
          ], [
              'test'
          ], [
              'set'
          ], [
              'get'
          ], 
        ]


т.е. если набор значений массива одинаковый то группируем если же нет это отдельная группа
  • Вопрос задан
  • 219 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
sergiks
@sergiks Куратор тега PHP
♬♬
Сортируйте наборы и склеивайте в строку – используйте полученные строки как ключи массива. Значения – массивы ключей исходного.

Так получите под одним ключем "cloo" два значения ["cool", "looc"], а для остальных по одному.

spoiler
<?php
$data = [
	"cool" => [0 => "c", 1 => "o", 2 => "o", 3 => "l"],
  "looc" => [0 => "l", 1 => "o", 2 => "o", 3 => "c"],
  "test" => [0 => "t", 1 => "e", 2 => "s", 3 => "t"],
  "set"  => [0 => "s", 1 => "e", 2 => "t"],
  "get"  => [0 => "g", 1 => "e", 2 => "t"]
];

$groups = [];
foreach( $data AS $k => $v) {
	sort($v);
	$hash = implode('', $v);
	if(!isset($groups[$hash])) $groups[$hash] = [];
	array_push($groups[$hash], $k);
}
$result = array_values($groups);

print_r($result);
/*
Array(
    [0] => Array
        (
            [0] => cool
            [1] => looc
        )

    [1] => Array
        (
            [0] => test
        )

    [2] => Array
        (
            [0] => set
        )

    [3] => Array
        (
            [0] => get
        )
)
*/
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы