отображать серийный номер над каждой буквой строки.PHP - PullRequest
1 голос
/ 30 декабря 2011

У меня есть строка с однобуквенными кодами, такими как
MGCLGNSKTEDQRNEEKAQREAMGCLGNSKTEDQRNEEKAQREAMGCLGNSKTEDQRNEEKAQREA
Я хотел бы напечатать серийный номер над каждой буквой в строке.

как

123456789101112131415161718192021222324252627282930  
MGCLGNSKTED Q R N E E K A Q R E A M G C L G N S K T  

спасибо заранее.

Ответы [ 3 ]

2 голосов
/ 30 декабря 2011

Хорошее оправдание, чтобы узнать о некоторых необычных функциях PHP:

<?php

$single_letter_codes = 'MGCLGNSKTEDQRNEEKAQREAMGCLGNSKTEDQRNEEKAQREAMGCLGNSKTEDQRNEEKAQREA';

foreach(range(1, strlen($single_letter_codes)) as $number){
    echo $number;
}
echo PHP_EOL;

foreach(str_split($single_letter_codes) as $index => $letter){
    // Changed ' ' to '·' to make it visible
    echo str_pad($letter, strlen($index+1), '·', STR_PAD_LEFT);
}
echo PHP_EOL;

Допущения:

  • Однобайтовые строки
  • Выровнять по правому краю, какв:

    10
     A
    

И мы получаем:

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
MGCLGNSKT·E·D·Q·R·N·E·E·K·A·Q·R·E·A·M·G·C·L·G·N·S·K·T·E·D·Q·R·N·E·E·K·A·Q·R·E·A·M·G·C·L·G·N·S·K·T·E·D·Q·R·N·E·E·K·A·Q·R·E·A

Обновление: Чтобы отобразить это как HTML, необходимо принудительно применитьшрифт фиксированной ширины.Самый простой способ - заключить все в набор тегов .

В качестве упражнения для читателя я оставлю использование пробелов вместо точек.

0 голосов
/ 30 декабря 2011

Возможно, это может помочь ...

<?php

$str = 'MGCLGNSKTEDQRNEEKAQREAMGCLGNSKTEDQRNEEKAQREAMGCLGNSKTEDQRNEEKAQREA';
$len = strlen($str);
$nums = '';
$lets = '';
for ($i = 1; $i <= $len; $i++) {
    $nums .= $i;
    $lets .= sprintf('% ' . strlen($i) . 's', $str[$i - 1]);
}
echo $nums . "\n" . $lets;

Вы получите

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
MGCLGNSKT E D Q R N E E K A Q R E A M G C L G N S K T E D Q R N E E K A Q R E A M G C L G N S K T E D Q R N E E K A Q R E A
0 голосов
/ 30 декабря 2011

Если я вас правильно понял, то это то, что вам нужно (осторожно, возможны небольшие ошибки, тест):

function printSerial($string){
   $map = array(
      'M' => 1,
      'G' => 2,
      'C' => 3,
      // ... please continue
   );
   $output = '';
   for($i=0; $i<strlen($string); $i++){
      $output .= $map[$string[$i]];
   }
   echo $output;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...