За последние 24 часа нас посетили 8093 программиста и 454 робота. Сейчас ищут 152 программиста ...

Подсчитать в массиве количество последовательностей (зигзагом) в двумерном массиве

Тема в разделе "Решения, алгоритмы", создана пользователем lemonl, 24 авг 2020.

  1. lemonl

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

    С нами с:
    10 июн 2009
    Сообщения:
    137
    Симпатии:
    0
    Подскажите как подсчитать в массиве количество последовательностей (зигзагом) в двумерном массиве:

    Код (Text):
    1. $MyArray = array(
    2.                 // Сдесь блок из 3 (или если бы было больше) последовательности принимаем за 1
    3.             array("2001-03-10 17:16", "2001-03-11 12:50"),  //0
    4.             array("2001-03-11 12:50", "2001-03-11 23:15"),  //1  $MyArray[1][0] = $MyArray[0][1]
    5.             array("2001-03-11 23:15", "2001-03-12 05:44"),  //2  $MyArray[2][0] = $MyArray[1][1]
    6.                 // Сдесь блок из 2 последовательности принимаем за 1
    7.             array("2001-03-15 11:32", "2001-03-15 19:58"),  //3
    8.             array("2001-03-15 19:58", "2001-03-16 11:32"),  //4  $MyArray[4][0] = $MyArray[3][1]
    9.                 // Сдесь блок без последовательности мы также принимаем за 1
    10.             array("2001-03-17 10:05", "2001-03-17 15:44"),  //5
    11.                 // Сдесь блок из 2 последовательности принимаем за 1
    12.             array("2001-03-18 09:30", "2001-03-19 11:50"),  //6
    13.             array("2001-03-19 11:50", "2001-03-19 18:22"),  //7  $MyArray[7][0] = $MyArray[6][1]
    14.                 );

    Выходит что $MyArray[id_next][0] = $MyArray[id_prev][1] Дата как бы идет зигзагом
    В данном примере 4 последовательности.
     
  2. Drunkenmunky

    Drunkenmunky Новичок

    С нами с:
    12 авг 2020
    Сообщения:
    216
    Симпатии:
    35
    Извините, а что значит зигзагом?
     
  3. lemonl

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

    С нами с:
    10 июн 2009
    Сообщения:
    137
    Симпатии:
    0
    [​IMG]
     
  4. Drunkenmunky

    Drunkenmunky Новичок

    С нами с:
    12 авг 2020
    Сообщения:
    216
    Симпатии:
    35
    Хорошо, а где он там в "дате"?
     
  5. lemonl

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

    С нами с:
    10 июн 2009
    Сообщения:
    137
    Симпатии:
    0
    вот )

    array("2001-03-10 17:16", "2001-03-11 12:50"), //0
    array("2001-03-11 12:50", "2001-03-11 23:15"), //1 $MyArray[1][0] = $MyArray[0][1]
    array("2001-03-11 23:15", "2001-03-12 05:44"), //2 $MyArray[2][0] = $MyArray[1][1]

    грубо говоря в первой колонке дата открытия, а вторая закрытия. Последующая дата открытия равна, предыдущему закрытию.
     
  6. Drunkenmunky

    Drunkenmunky Новичок

    С нами с:
    12 авг 2020
    Сообщения:
    216
    Симпатии:
    35
    OK. Теперь понял.
    Нужен счетчик.
    Сравнивать значения. Увеличивать счет на 1 если есть совпадния.
    В конце вывод.
     
  7. lemonl

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

    С нами с:
    10 июн 2009
    Сообщения:
    137
    Симпатии:
    0

    Эххх... да вроде бы не сложно ) но что то все никак не могу доточить
     
  8. Drunkenmunky

    Drunkenmunky Новичок

    С нами с:
    12 авг 2020
    Сообщения:
    216
    Симпатии:
    35
    PHP:
    1. <?php
    2.  
    3. $MyArray = array(
    4.                 // Сдесь блок из 3 (или если бы было больше) последовательности принимаем за 1
    5.             array("2001-03-10 17:16", "2001-03-11 12:50"),  //0
    6.             array("2001-03-11 12:50", "2001-03-11 23:15"),  //1  $MyArray[1][0] = $MyArray[0][1]
    7.             array("2001-03-11 23:15", "2001-03-12 05:44"),  //2  $MyArray[2][0] = $MyArray[1][1]
    8.                 // Сдесь блок из 2 последовательности принимаем за 1
    9.             array("2001-03-15 11:32", "2001-03-15 19:58"),  //3
    10.             array("2001-03-15 19:58", "2001-03-16 11:32"),  //4  $MyArray[4][0] = $MyArray[3][1]
    11.                 // Сдесь блок без последовательности мы также принимаем за 1
    12.             array("2001-03-17 10:05", "2001-03-17 15:44"),  //5
    13.                 // Сдесь блок из 2 последовательности принимаем за 1
    14.             array("2001-03-18 09:30", "2001-03-19 11:50"),  //6
    15.             array("2001-03-19 11:50", "2001-03-19 18:22"),  //7  $MyArray[7][0] = $MyArray[6][1]
    16.                 );
    17.  
    18. echo '<pre>';
    19. //объединяем массив, для наглядности
    20. foreach($MyArray as $ar1)
    21. {
    22.   foreach($ar1 as $ar2)
    23.   {
    24.    $newarr[] = $ar2;
    25.   }
    26. }
    27.  
    28. print_r($newarr);
    29. $sequence = 0;
    30. foreach ($newarr as $key=>$value)
    31. {
    32.   if (isset($newarr[$key-1]) && $newarr[$key-1] == $value)
    33.   {
    34.    $sequence++;
    35.   }
    36.  
    37. }
    38.  
    39. echo 'found: '. $sequence.' sequences';
    40. ?>