搜索关联数组并在php中打印相应的值

时间:2013-06-25 03:31:05

标签: php arrays

我有一个像

这样的词典
UUU F
UUC F
CUU L
CUC L
UUA L
CUA L
UUG L
CUG L
AUU I
AUC I
AUA I
GUU V
GUC V
GUG V
GUA V

所以给定一个字符串我想用每个3个字符替换它们各自的字符

我在考虑使用关联数组:

    $d = array();
$d['UUU']='F';
$d['UUC']='F';
$d['UUA']='L';
$d['CUU']='L';
$d['GUC']='V';
$d['GUG']='V';
$d['GUA']='V';
$d['UUG']='L';
$d['CUG']='L';

$s = "UUAGUAUUG";
$temp="";
for($i=0; $i<strlen($s)+1; $i++){ 
    $temp .= $s[$i];
    if($i%3==0){
        echo $temp;
        echo array_search($temp, $d);
        $temp = "";
    }   
}



It should output LVL but have no success

5 个答案:

答案 0 :(得分:2)

使用str_split

$s = 'UUAGUAUUG';
$split = str_split($s,3);
$translated = array();

foreach ($split as $bases) {
    /**
     * @ supresses warnings if the array index doesn't exist
     */
    $translated []= @$d[$bases];
}

echo join('',$translated);

答案 1 :(得分:1)

我认为这可行:

$temp = implode(array_map(function($a) { return $d[$a];}, str_split($s, 3)));

答案 2 :(得分:1)

基本解决方案是:

<?php
$dict = array(
 'UUU' => 'F',
 'UUC' => 'F',
 'UUA' => 'L',
 'CUU' => 'L',
 'GUC' => 'V',
 'GUG' => 'V',
 'GUA' => 'V',
 'UUG' => 'L',
 'CUG' => 'L'
);

$before = "UUAGUAUUG";

$after = strtr($before, $dict);

虽然您可以编写一个更快的版本,考虑到您要替换每三个字母。

我并不是百分百肯定这甚至会起作用,因为在3-char屏障上可以重叠什么样的组合。这让你有了这个糟糕的解决方案:

$after = str_replace('-', '',
  strtr(preg_replace('/[A-Z]{3}/', '\0-', $before), $dict));

说真的,不要在家里试试。 ;)

答案 3 :(得分:0)

你正在错误的时间进行测试。

$i%3 == 0更改为$i%3 == 2

这里的原因是您先添加了临时字符串。这意味着您要立即检查长度为1("U")的字符串,然后将其清除。然后你又去了3次,得到"UAG",然后是"UAU"。这些都不在您的阵列中。

我不明白的是,每次发生这种情况时都会输出$temp的值,所以你应该对此有所了解。

答案 4 :(得分:0)

将for循环更改为:

for($i=0; $i<strlen($s)+1; $i++){ 
    $temp .= $s[$i];
    if(($i+1)%3==0){
        echo $d[$temp];
        $temp = "";
    }   
}

你的i值从0开始。而array_values没有给出预期的答案。