Darkstar
Новичок
Пошаговое сравнение ячеек многомерного массива с записью результатов в таблицу
Дан массив (таблица), содержащее в каждой строке набор из некоторого конечного множества символов (например, A, B, C, D и E).
Например,
A, A, B
A
A, B, C
B, C
D
A, A, D
E, D
Нужно последовательно сравнивать каждую строку массива с каждой другой строкой массива. Если совпадает ХОТЯ БЫ ОДИН символ, писать 1, если не совпадает ничего, писать 0.
Итак, нужно взять ПЕРВУЮ строку (А, А, B) и сравнить ее со 2-ой строкой (A), 3-й (A, B, C), 4-й... n-й
Потом берется 2-я строка и опять с 3-й, 4-й и т.д. – т.е. со всеми которые НИЖЕ (можно и со всеми вообще, начиная с 1-й, но тогда матрица сравнения будет не «половинчатая», а полная, симметричная – ладно мне сойдет и так, если это сложно…)
Потом 3-я с 4-й, 5-й, 6-й и т.д.
….
В конце предпоследняя строка с последней строкой.
При этом результат сравнения $a каждый раз должен записываться отдельно в ячейку НОВОЙ таблицы РЕЗУЛЬТАТОВ СРАВНЕНИЯ и как-то там ПОТОМ еще должен многократно суммироваться, потому что таких самосравнений таблиц будет много… Для чего это вообще нужно? Такая операция типа показывает статистическую степень родства или генетической близости cодержимого строк друг с другом.
Т.е. получится должно что-то вроде
1 – первая со второй
1 – первая с третьей
1 – первая с четвертой
0 – первая с пятой (ни одного общего элемента)
и т.д.
В итоге имеем что-то вроде:
1
1 1
1 0 1
0 0 0 0
1 1 1 0 1
0 0 0 0 1 1
Пока для начала прошу объяснить хотя бы как сравнивают две строки такого массива. Мне кажется, задача не cовсем тривиальная.
PS: Я не проф. программист PHP, я просто пытаюсь решить конкретную задачу.
-~{}~ 10.08.09 20:23:
Как сравнивать строки, так чтобы найти ХОТЯ БЫ один общий элемент, я уже придумал. Нужно взять ПЕРЕСЕЧЕНИЕ двух массивов, а затем подсчитать кол-во общих элеметов и посмотреть больше ли оно нуля
<?php
$a1=array(0=>"A",1=>"B",2=>"A");
$a2=array(3=>"D",4=>"C");
print_r(array_intersect($a1,$a2));
echo "<br /> The number of common elements is ".count(array_intersect($a1,$a2));
if (count(array_intersect($a1,$a2)) > 0)
{$a =1; echo "<br /> a=".$a;}
else
{$a =0; echo "<br /> a=".$a;}
?>
Но как последовательно сравнивать строки, пока не знаю.
Дан массив (таблица), содержащее в каждой строке набор из некоторого конечного множества символов (например, A, B, C, D и E).
Например,
A, A, B
A
A, B, C
B, C
D
A, A, D
E, D
Нужно последовательно сравнивать каждую строку массива с каждой другой строкой массива. Если совпадает ХОТЯ БЫ ОДИН символ, писать 1, если не совпадает ничего, писать 0.
Итак, нужно взять ПЕРВУЮ строку (А, А, B) и сравнить ее со 2-ой строкой (A), 3-й (A, B, C), 4-й... n-й
Потом берется 2-я строка и опять с 3-й, 4-й и т.д. – т.е. со всеми которые НИЖЕ (можно и со всеми вообще, начиная с 1-й, но тогда матрица сравнения будет не «половинчатая», а полная, симметричная – ладно мне сойдет и так, если это сложно…)
Потом 3-я с 4-й, 5-й, 6-й и т.д.
….
В конце предпоследняя строка с последней строкой.
При этом результат сравнения $a каждый раз должен записываться отдельно в ячейку НОВОЙ таблицы РЕЗУЛЬТАТОВ СРАВНЕНИЯ и как-то там ПОТОМ еще должен многократно суммироваться, потому что таких самосравнений таблиц будет много… Для чего это вообще нужно? Такая операция типа показывает статистическую степень родства или генетической близости cодержимого строк друг с другом.
Т.е. получится должно что-то вроде
1 – первая со второй
1 – первая с третьей
1 – первая с четвертой
0 – первая с пятой (ни одного общего элемента)
и т.д.
В итоге имеем что-то вроде:
1
1 1
1 0 1
0 0 0 0
1 1 1 0 1
0 0 0 0 1 1
Пока для начала прошу объяснить хотя бы как сравнивают две строки такого массива. Мне кажется, задача не cовсем тривиальная.
PS: Я не проф. программист PHP, я просто пытаюсь решить конкретную задачу.
-~{}~ 10.08.09 20:23:
Как сравнивать строки, так чтобы найти ХОТЯ БЫ один общий элемент, я уже придумал. Нужно взять ПЕРЕСЕЧЕНИЕ двух массивов, а затем подсчитать кол-во общих элеметов и посмотреть больше ли оно нуля
<?php
$a1=array(0=>"A",1=>"B",2=>"A");
$a2=array(3=>"D",4=>"C");
print_r(array_intersect($a1,$a2));
echo "<br /> The number of common elements is ".count(array_intersect($a1,$a2));
if (count(array_intersect($a1,$a2)) > 0)
{$a =1; echo "<br /> a=".$a;}
else
{$a =0; echo "<br /> a=".$a;}
?>
Но как последовательно сравнивать строки, пока не знаю.