代码之家  ›  专栏  ›  技术社区  ›  Tim

如何在PHP中“添加”字符串-不是连接,而是“添加”它们。(好像每个字符都是以36为基数的数字)

  •  0
  • Tim  · 技术社区  · 16 年前

    具体地说,该功能获取一些任意字符串并将它们“添加”在一起。(c代码遍历字符数组,然后进行一些检查以确保它们在字母数字范围内)

    我找不到关于如何做到这一点的具体代码示例(我不是PHP开发人员)-有人能给我指出一些可以解释这一点的参考资料吗?(基本上是如何进行字符串/字符数组操作)

    编辑

    针对一些评论和回答:

    C代码现在转换为基数36(从ascii) 然后将每个元素“添加”在一起(虽然原作者有意这样做,但并不包含这些元素,出于某种奇怪的原因,“添加”从最重要到最不重要) 然后转换回ascii。 字符串可以有不同的长度

    根据目前的答案,我想我已经足够满足我的需要了。有时学习一门新的语言总是令人沮丧的-你确切地知道你想要什么,你可以用其他语言来做,只是不是为了手头的任务。。。

    3 回复  |  直到 14 年前
        1
  •  3
  •   Josh Davis    16 年前

    你就不能 base_convert ()他们?

    $sum   = base_convert($str1, 36, 10) + base_convert($str2, 36, 10);
    $sum36 = base_convert($sum, 10, 36);
    

    还是需要任意精度?这是一个任意精度加法的尝试,以36为基数:

    function b36_add($str1, $str2)
    {
        $to10 = array();
        for ($i = 0; $i < 36; ++$i)
        {
            $to10[base_convert($i, 10, 36)] = $i;
        }
    
        $len  = max(strlen($str1), strlen($str2));
        $str1 = str_repeat('0', $len - strlen($str1)) . $str1;
        $str2 = str_repeat('0', $len - strlen($str2)) . $str2;
    
        $pos   = $len - 1;
        $carry = 0;
        $sum   = '';
    
        do
        {
            $tmp    = base_convert($carry + $to10[$str1[$pos]] + $to10[$str2[$pos]], 10, 36);
            $sum   .= substr($tmp, -1);
            $carry  = (int) substr($tmp, 0, -1);
        }
        while (--$pos >= 0);
    
        $sum = strrev($sum);
        if ($carry)
        {
            $sum = base_convert($carry, 10, 36) . $sum;
        }
        return $sum;
    }
    
        2
  •  3
  •   Paul Huff    16 年前

    <?
      $x = "Hello";
      print $x[0] . "\n";
    

    换句话说,$string_var[n]给出了第n个字符,0索引。

        3
  •  1
  •   Brendan Long    16 年前

    首先,我假设您想要添加ascii值。

    ord()

    <?php
    function addStrings($x, $y){
      // Assumes that both strings are the same length
      for($i=0; $i<strlen($x); $i++){
        $result[i] = ord($x[i]) + ord($y[i]);
      }
      return $result;
    }
    ?>
    

    推荐文章