Сравнить несколько массивов (1 из 3 верное)

Тема в разделе "Как сделать...", создана пользователем silmarion, 7 июл 2015.

  1. silmarion

    silmarion

    Регистр.:
    21 июн 2012
    Сообщения:
    194
    Симпатии:
    19
    Всем привет, в общем есть 5 массивов, по 3 значения в каждом.

    По условию, в каждом из 5 массивов лишь одно из 3 значений верное.

    $av=array('a' => 'e4','c5','d1');
    $bv=array('b' => 'a2','d5','e1');
    $cv=array('c' => 'd3','a5','b1');
    $dv=array('d' => 'c2','b1','e4');
    $ev=array('e' => 'b2','a4','c1');

    Мне нужно вывести 5 значений, чтобы они не противоречили условию.
    a=
    b=
    c=
    d=
    e=
     
  2. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.546
    Симпатии:
    1.418
    Как-то не сильно понятно условие задачи. И даже более того скорее наблюдается полное отсутствие условия...
    Покажите может пример того что надо на выходе получить из представленных массивов?
     
  3. silmarion

    silmarion

    Регистр.:
    21 июн 2012
    Сообщения:
    194
    Симпатии:
    19
    5 массивов, в каждом из массивов только 1 значение может быть верным.
    Нужно вычислить какие значения верны
    К примеру, если в первом массиве значение e4 (те е=4) примем за верное
    то во втором массиве значение e1 (е=1) будет уже противоречием
    Надо найти верные решения, в которых 1 значение в каждом массиве будет верным, и оно не будет противоречить верным значениям в остальных массивах
     
    Последнее редактирование: 8 июл 2015
  4. venetu

    venetu

    Регистр.:
    28 мар 2007
    Сообщения:
    737
    Симпатии:
    263
    Сначала идем по первому массиву, и каждое его условие считаем верным. Потом, для каждого этого "верного" условия проходим по всем остальным и ищем противоречия. Если есть противоречие (b1 и b3) - помечаем условие как херовое, если совпадение (b1 и b1) - ничего не делаем, все и так хорошо, условие выполняется, если встретили новое условие (b1 и c1) - добавляем его в список наших условий и идем дальше, и так пока не дойдем до конца.

    Для твоего примера:
    $av=array('a' => 'e4','c5','d1');
    $bv=array('b' => 'a2','d5','e1');
    $cv=array('c' => 'd3','a5','b1');
    $dv=array('d' => 'c2','b1','e4');
    $ev=array('e' => 'b2','a4','c1');

    Берем первый массив:
    Код:
          a   b   c   d   e
    av            5   1   4
    
    (пока что все условия истинны, просто их дописываем)

    Добавляем второй массив
    Код:
        a     b   c   d   e
    av            5   1   4
    bv  2             5   1
    
    (уже видно, что d5 и e1 с первым массивом не согласуются, a2 дописываем в список условий)

    Добавляем аналогично остальные:
    Код:
        a   b   c   d   e
    av  *   *   5   1   4
    bv  2   *   *   5   1
    cv  5   1   *   *   3
    dv  *   1   2   *   4
    ev  4   2   1   *   *
    
    Получаем, что нету ни одного условия, которое бы не противоречило остальным. Во всех без исключения столбцах (a,b,c,d,e) встречаются разные числа
     
    latteo нравится это.