За последние 24 часа нас посетил 17891 программист и 1648 роботов. Сейчас ищут 998 программистов ...

Получить уникальные элементы-массивы массива

Тема в разделе "PHP для новичков", создана пользователем inline, 12 мар 2014.

  1. inline

    inline Активный пользователь

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    Есть массив
    Код (Text):
    1. Array
    2. (
    3.     [] => Array
    4.         (
    5.             [0] => Благовещенск
    6.             [1] => Якутск
    7.         )
    8.  
    9.     [1] => Array
    10.         (
    11.             [0] => Благовещенск
    12.             [1] => Хабаровск
    13.         )
    14.  
    15.     [2] => Array
    16.         (
    17.             [0] => Благовещенск
    18.             [1] => Владивосток
    19.         )
    20.  
    21.     [3] => Array
    22.         (
    23.             [0] => Благовещенск
    24.             [1] => Чита
    25.         )
    26.  
    27.     [4] => Array
    28.         (
    29.             [0] => Благовещенск
    30.             [1] => Иркутск
    31.         )
    32.  
    33.     [5] => Array
    34.         (
    35.             [0] => Благовещенск
    36.             [1] => Екатеринбург
    37.         )
    38.  
    39.     [6] => Array
    40.         (
    41.             [0] => Благовещенск
    42.             [1] => Москва
    43.         )
    44.  
    45.     [7] => Array
    46.         (
    47.             [0] => Благовещенск
    48.             [1] => Новосибирск
    49.         )
    50.  
    51.     [8] => Array
    52.         (
    53.             [0] => Хабаровск
    54.             [1] => Токио
    55.         )
    56.  
    57.     [9] => Array
    58.         (
    59.             [0] => Хабаровск
    60.             [1] => Сеул
    61.         )
    62.  
    63.     [10] => Array
    64.         (
    65.             [0] => Хабаровск
    66.             [1] => Якутск
    67.         )
    68.  
    69.     [11] => Array
    70.         (
    71.             [0] => Хабаровск
    72.             [1] => Благовещенск
    73.         )
    74.  
    75.     [12] => Array
    76.         (
    77.             [0] => Хабаровск
    78.             [1] => Магадан
    79.         )
    80.  
    81.     [13] => Array
    82.         (
    83.             [0] => Хабаровск
    84.             [1] => Петропавловск
    85.         )
    86.  
    87.     [14] => Array
    88.         (
    89.             [0] => Хабаровск
    90.             [1] => Владивосток
    91.         )
    92.  
    93.     [15] => Array
    94.         (
    95.             [0] => Хабаровск
    96.             [1] => Чита
    97.         )
    98.  
    99.     [16] => Array
    100.         (
    101.             [0] => Хабаровск
    102.             [1] => Иркутск
    103.         )
    104.  
    105.     [17] => Array
    106.         (
    107.             [0] => Хабаровск
    108.             [1] => Краснодар
    109.         )
    110.  
    111.     [18] => Array
    112.         (
    113.             [0] => Хабаровск
    114.             [1] => Екатеринбург
    115.         )
    116.  
    117.     [19] => Array
    118.         (
    119.             [0] => Хабаровск
    120.             [1] => Москва
    121.         )
    122.  
    123.     [20] => Array
    124.         (
    125.             [0] => Хабаровск
    126.             [1] => Бангкок
    127.         )
    128.  
    129.     [21] => Array
    130.         (
    131.             [0] => Хабаровск
    132.             [1] => Новосибирск
    133.         )
    134.  
    135.     [22] => Array
    136.         (
    137.             [0] => Хабаровск
    138.             [1] => Красноярск
    139.         )
    140.  
    141.     [23] => Array
    142.         (
    143.             [0] => Хабаровск
    144.             [1] => Анадырь
    145.         )
    146.  
    147.     [24] => Array
    148.         (
    149.             [0] => Владивосток
    150.             [1] => Токио
    151.         )
    152.  
    153.     [25] => Array
    154.         (
    155.             [0] => Владивосток
    156.             [1] => Сеул
    157.         )
    Как получить все уникальные подмассивы
    п.с. (array_unique не проходит)
     
  2. inline

    inline Активный пользователь

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    на входе
    Цитата:
    $arr = array(
    array('Благовещенск', 'Якутск'),
    array('Благовещенск', 'Хабаровск'),
    array('Якутск', 'Благовещенск'),
    );
    на выходе
    Цитата:
    $arr = array(
    array('Благовещенск', 'Якутск'),
    array('Благовещенск', 'Хабаровск'),
    );

    array('Благовещенск', 'Якутск'),
    array('Якутск', 'Благовещенск'),

    считаем равными массивами
     
  3. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Перебором и сравнением ячеек с известными уникальными массивами. Известные уникальные массивы, которые и будут результатом, формируем по ходу пьесы.
     
  4. inline

    inline Активный пользователь

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    если не сложно - черкните пример
    спасибо!

    п.с. если честно, то ничего не понял
     
  5. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Вот те на скорую руку собранный, не проверенный ни разу, рабочий только на глаз пример:

    Код (PHP):
    1. <?php
    2.     function getUniquePair($array)
    3.     {    $result = array($array[0]);
    4.         foreach ($array as $pair)
    5.         {
    6.             foreach($result as $res_pair)
    7.             {
    8.                 if ((($res_pair[0]!==$pair[0]) and ($res_pair[1]!==$pair[1])) and
    9.                    (($res_pair[0]!==$pair[1]) and ($res_pair[1]!==$pair[0])))
    10.                    {
    11.                         $result[] = $pair;
    12.                         break;
    13.                    }
    14.             }
    15.         }
    16.         return $result;
    17.     }
    18. ?>
    Заодно попрактикуешься в отладке. Комментов специально нет. Без труда ни оттуда, ни туда. Разбирайся.
     
  6. inline

    inline Активный пользователь

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    результат Array ( [0] => Array ( [0] => Благовещенск [1] => Якутск ) )
    не то
     
  7. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Да то, то, просто я ж сказал,
    Отлаживай. Даю подсказку, ошибка где-то в ифах.

    Добавлено спустя 2 минуты 6 секунд:
    Я даже без отладки увидел, где косяк. Ищи.
     
  8. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Код (PHP):
    1. function combineArrays(array $array) {
    2.     $combineArray=array();
    3.     foreach($array as $value) { 
    4.         if(is_array($value)) { 
    5.             $combineArray=array_merge($combineArray,combineArrays($value)); 
    6.         } else { 
    7.             $combineArray[]=$value; 
    8.         } 
    9.     } 
    10.     return $combineArray;
    11. } 
     
  9. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Для мержа это таки разные массивы.
     
  10. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Код (PHP):
    1. $arr = array(
    2.     array('Благовещенск', 'Якутск'),
    3.     array('Благовещенск', 'Хабаровск'),
    4.     array('Якутск', 'Благовещенск'),
    5. );
    6. echo'<pre>';
    7. print_r(combineArrays($arr));
    Код (PHP):
    1. (
    2.     [0] => Благовещенск
    3.     [1] => Якутск
    4.     [2] => Благовещенск
    5.     [3] => Хабаровск
    6.     [4] => Якутск
    7.     [5] => Благовещенск
    8. ) 
     
  11. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    И к чему ты это?
     
  12. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    Код (PHP):
    1. $arr = array(
    2. array('Благовещенск', 'Якутск'),
    3. array('Благовещенск', 'Хабаровск'),
    4. array('Якутск', 'Благовещенск'),
    5. );
    6. // 1. Flatten array
    7. $it = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr));
    8. $result = array();
    9. foreach ($it as $v) $result[] = $v;
    10. // 2. Get Unique
    Код (Text):
    1. array (
    2.   0 => 'Благовещенск',
    3.   1 => 'Якутск',
    4.   3 => 'Хабаровск',
    5. )
     
  13. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Робяты, нужно найти уникальные пары, а не уникальные города.
     
  14. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    Код (PHP):
    1. <?php
    2.  
    3. $arr = array(
    4.   array('Благовещенск', 'Якутск'),
    5.   array('Благовещенск', 'Хабаровск'),
    6.   array('Якутск', 'Благовещенск'),
    7. );
    8. // было бы проще, если бы array_unique умел сравнивать подмассивы. 
    9. // а так придется их превратить в строки, сравнить, затем обратно в масивы.
    10. $result = array_map(function($x) {sort($x); return serialize($x);}, $arr);
    11. $result = array_unique($result);
    12. $result = array_map('unserialize', $result);
    13. var_export($result);
    Код (Text):
    1. array (
    2.   0 =>  array (
    3.     0 => 'Благовещенск',    1 => 'Якутск',
    4.   ),
    5.   1 =>  array (
    6.     0 => 'Благовещенск',    1 => 'Хабаровск',
    7.   ),
    8. )
     
  15. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    ну дайте людям учиться:)
     
  16. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    пахнет какой-то хернёй. если вам надо уники, то почему массивов много?