【问题标题】:Dissecting a string剖析字符串
【发布时间】:2012-01-31 14:16:03
【问题描述】:

我怀疑以前有人问过这个问题,但我不知道它实际上叫什么,所以我找不到任何东西。

我正在创建一个基于浏览器的游戏,其中玩家有一个 10x10 的网格。每个方格都有几个方面,一些是二进制标志,另一些是十六进制值。

要将此信息存储在数组中,我希望给定单元格包含以下内容:

“9A0101”,其中 9A 是瓦片类型,0 和 1 是关于该地图瓦片的二进制标志。

我希望能够将“9A0101”拆分为“9A”、“0”、“1”、“0”和“1”作为单独的变量。

TLDR:

如何在 PHP 中分割字符串?字符串的长度总是相同的,我要切割的部分总是相同的偏移量。

【问题讨论】:

  • 这样序列化数据有什么原因吗?数组可以像这样存储嵌套数组:array('type' => 0x9A, 'flags' => 5).
  • 是的 - 我将存储和使用 10 行 10 列 mysql 表中的网格。据我了解,这是在 sql 表中处理此类事情的最佳方式 - 但如果我错了,请告诉我。
  • 你应该重新设计你的数据库,序列化的数据在选择中是致命的,你会偶然发现很多你不能用这些数据做的事情。

标签: php string variables slice


【解决方案1】:

使用substr()获取字符串部分

<?php
echo substr('9A0101', 0,2);     // 9A
echo substr('9A0101', 2, 1);  // 0
echo substr('9A0101', 3, 1);  // 1
echo substr('9A0101', 4, 1);  // 0
echo substr('9A0101', 5, 1);  // 1
?>

【讨论】:

    【解决方案2】:

    substr() 呢? :

    <?php
    $str = '9A0101';
    echo substr($str,0,2); 
    echo substr($str,2,1); 
    echo substr($str,3,1);
    echo substr($str,4,1); 
    echo substr($str,5,1); 
    ?>
    

    【讨论】:

      【解决方案3】:

      你可以使用 substr() 函数

      <?php
      $str = "9A0101";
      $arr = Array();
      
      $arr[0] = substr($str, -6, 2);
      $arr[1] = substr($str, -4, 1);
      $arr[2] = substr($str, -3, 1);
      $arr[3] = substr($str, -2, 1);
      $arr[4] = substr($str, -1, 1);
      
      foreach($arr as $key => $val) {
          echo($key . "=>" . $val . '<br/>');
      } 
      ?>
      

      【讨论】:

        【解决方案4】:

        或者也许可以使用 str_split() 函数。

        $str = "9A0101";
        
        //splitting the string
        $array = str_split($str, 2);
        
        var_dump($array);
        
        
        
        

        【讨论】:

          【解决方案5】:

          如果您正在寻找单个函数调用,正则表达式可以很好地为您服务。

          preg_split('~(^..|.)\K~', $string);
          

          上面将字符串分割在零宽度位置之后字符串的前两个字符或每个后续字符。 \K 表示忘记已经匹配的内容。

          如果要将 5 个值保存为单个变量,则可以使用 list() 或数组解构语法。 Demo

          [$type, $one, $two, $three, $four] = preg_split('~(^..|.)\K~', $string);
          

          如果您愿意,您甚至可以通过字符串偏移量访问单字节字符。 Demo

          $type = $string[0] . $string[1];
          $one = $string[2];
          $two = $string[3];
          $three = $string[4];
          $four = $string[5];
          

          【讨论】:

            猜你喜欢
            • 2016-07-02
            • 1970-01-01
            • 2020-01-08
            • 2012-12-19
            • 1970-01-01
            • 2011-10-10
            • 1970-01-01
            • 1970-01-01
            • 2015-01-13
            相关资源
            最近更新 更多