如何将二进制编码为 DNA 序列
How to encode binary to a DNA sequence
我想按照以下规则将二进制序列编码为 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);
?>
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()
的双参数实现来进行这些转换,如下所示:
// 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") );
我想按照以下规则将二进制序列编码为 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);
?>
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()
的双参数实现来进行这些转换,如下所示:
// 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") );