如何将二进制编码为DNA序列

时间:2016-05-24 08:20:56

标签: php string encoding binary bioinformatics

我想按照以下规则将二进制序列编码为DNA序列:

00 = A
01 = C
10 = G
11 = T

例如:10011100 = GCTA

我编写了一个PHP脚本,将我的字符串转换为二进制,然后使用str_replace函数将二进制文件转换为DNA序列。我的问题是DNA序列没有正确转换。有人能帮助我吗?

这是我的PHP脚本:

<?php
// Function to convert string to bin
function strToBin($input) {
    if (!is_string($input))
        return false;
    $ret = '';
    for ($i = 0; $i < strlen($input); $i++) {
        $temp = decbin(ord($input{$i}));
        $ret .= str_repeat('0', 8 - strlen($temp)) . $temp;
    }
    return $ret;
}
$bin = strToBin('Stack');
// Try to transcript binary to DNA
$bincomb = array('00', '01', '10', '11');
$DNAtrans = array('A', 'C', 'G', 'T');

echo $transcript = str_replace($bincomb, $DNAtrans, $bin);
?>

2 个答案:

答案 0 :(得分:2)

str_replace()方法无法正常工作,因为它会按照00011011的顺序查找子字符串。因此,例如,使用二进制字符串1001,它会用00替换内部A,之后字符串为1A1,并且不能再进行转换。

要使你的功能正常工作,你需要以两个字符的块来浏览二进制字符串。

$bin = strToBin('Stack');

$bin = str_split($bin, 2);

$combine = array(
    '00' => 'A',
    '01' => 'C',
    '10' => 'G',
    '11' => 'T'
);

$str = '';

foreach ($bin as $item)
    $str .= $combine[$item];

首先将字符串拆分为两个字符的块,然后循环并将它们各自的值附加到结果字符串$str

答案 1 :(得分:0)

在PHP中,我通常使用strtr()的两个参数实现这些转换,如下所示:

// outputs 10011100

echo strtr("GCTA", array("A" => "00", "C" => "01", "G" => "10", "T" => "11"));

相反也可以:

// outputs GCTA

echo strtr(“ 10011100”,array(“ 00” =>“ A”,“ 01” =>“ C”,“ 10” =>“ G”,“ 11” =>“ T”)));