У меня много комбинаций разных типов генов. Каждая комбинация имеет свою ценность. Я хочу найти значение по комбинации.
Примечание:
Переключаемые буквы одинаковы. Пример: 'CT' = 'TC', 'AG' = 'GA' и т. Д.
Я решаю это сейчас, преобразовывая буквы в числа и сравнивая их суммы. Смотри мой код, пожалуйста.
Это хороший подход?
Должен ли я изменить свою структуру данных? ($ Карта)
<?php
function toNum($string)
{
$map = [
'A' => 1,
'C' => 2,
'G' => 3,
'T' => 4,
];
$arr = str_split($string);
$r = 0;
foreach ($arr as $value) {
if (!isset($map[$value])) {
continue;
}
$r += $map[$value];
}
return $r;
}
function getValue($map, $input)
{
foreach ($map as $row => $key) {
$current_row = $row;
$row = explode(',', $row);
$attempt = 0;
foreach ($row as $key => $value) {
if (toNum($row[$key]) === toNum($input[$key])) {
$attempt++;
}
}
if ($attempt === count($row)) {
return $map[$current_row];
}
}
}
$map = [
'CC,GG,AA,CC' => 'high',
'TT,AG,TT,CG' => 'medium',
'CT,AG,TT,GG' => 'low',
];
echo getValue($map, ['CC', 'GG', 'AA', 'CC']) . "\n"; // high
echo getValue($map, ['TT', 'AG', 'TT', 'CG']) . "\n"; // medium
echo getValue($map, ['TT', 'GA', 'TT', 'GC']) . "\n"; // medium
echo getValue($map, ['CT', 'AG', 'TT', 'GG']) . "\n"; // low
?>