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

Php 如何将二进制编码为DNA序列,php,string,encoding,binary,bioinformatics,Php,String,Encoding,Binary,Bioinformatics,我想按照以下规则将二进制序列编码为DNA序列: 00 = A 01 = C 10 = G 11 = T 例如:10011100=GCTA 我编写了一个PHP脚本,将字符串转换为二进制,然后使用str\u replace函数将二进制转换为DNA序列。我的问题是DNA序列没有正确转换。有人能帮我吗 以下是我的PHP脚本: <?php // Function to convert string to bin function strToBin($input) { if (!is_str

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

00 = A
01 = C
10 = G
11 = T
例如:
10011100
=
GCTA

我编写了一个PHP脚本,将字符串转换为二进制,然后使用
str\u 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);
?>

str_replace()
方法不起作用,因为它按
00
01
10
11
的顺序查找子字符串。因此,例如,对于二进制字符串
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

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

//输出10011100
回波strtr(“GCTA”,数组(“A”=>“00”,“C”=>“01”,“G”=>“10”,“T”=>“11”);
也可能出现相反的情况:

// outputs GCTA

回波strtr(“10011100”,数组(“00”=>“A”,“01”=>“C”,“10”=>“G”,“11”=>“T”)

您好@Antti29,非常感谢您的帮助和解释。它工作得很好。