每两位数交换一次

时间:2015-08-13 07:40:02

标签: php swap digits

如何使用PHP在长数值中每两位数交换一次? 您可以在下面看到一个示例:

示例:12345678

转换为:21436587

3 个答案:

答案 0 :(得分:1)

首先你必须转换为array.For使用

$array=explode("",$string);

您将获得{"1","2","3","4","5","6","7","8"}

然后调用以下函数。

function swapNumbers($array){
$finalString="";
for($i=0;$i<sizeOf($array);$i++){
if($i!=0){
if($i%2==0){
$finalString.=$array[$i-1].$array[$i];
}
}
if($i==sizeOf($array)-1 && $i%2==1){
$finalString.=$array[$i];
}
}
return $finalString;
}

您将获得21436587

答案 1 :(得分:0)

您可以(例如)通过使用循环和substr_replace()函数来解决此问题。照顾奇怪的人物。

正如评论中所提到的,请先尝试一些代码。

答案 2 :(得分:0)

<?php

class SwapableNumber
{
  private $value;
  private $swapSize;

  public function __construct($value, $swapSize = 2)
  {
    $this->value = $value;
    $this->swapSize = $swapSize;
  }

  public function swap()
  {
    $result = [];
    $valueParts = str_split($this->value, $this->swapSize);

    foreach ($valueParts as $part) {
      // for last part and if it is not complete in size
      // (e.g 2 number for a swapSize == 2), it returns
      // it unchanged. If the requirement is that partial
      // groups of digits should be reversed, too, remove the
      // conditional block.
      if (strlen($part) < $this->swapSize) {
        $result[] = $part;
        break;
      }

      $result[] = strrev($part);
    }

    return implode('', $result);
  }
}

// Example usage (by default the swap size is 2 so it swaps every 2 digits):
$n = new SwapableNumber(12345678);
echo $n->swap();