【问题标题】:How to encode binary to a DNA sequence如何将二进制编码为 DNA 序列
【发布时间】:2016-09-21 08:09:31
【问题描述】:

我想按照以下规则将二进制序列编码为 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);
?>

【问题讨论】:

    标签: php string encoding binary bioinformatics


    【解决方案1】:

    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

    【讨论】:

    • 嗨@Antti29,非常感谢您的帮助和解释。效果很好。
    【解决方案2】:

    在 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"));

    【讨论】:

      猜你喜欢
      • 2014-10-09
      • 1970-01-01
      • 2014-09-30
      • 2018-10-22
      • 2016-03-19
      • 2015-01-29
      • 2011-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多