php字符串操作

85 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第32天,点击查看活动详情

字符串操作总结

字符串查找

查找字符串中某一特定字符

```php
    q : 在下面的字符串中查找第一个出现在双竖线前面的字符

    a : 
    <?php
        $str = "admin||46cc468df60c961d8da2326337c7aa58||0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,";

        // 通过explode将字符串转化为数组,然后取第一个
        $result = explode('||', $str);
        var_dump($result[0]);

        // strpos得到第一次出现||的位置,然后通过substr进行字符串的截取
        $result1 = substr($str, 0, strpos($str,"||"));
        var_dump($result1);
    ?>
```

指定字符串中查找子字符串

```php
    <?php
        $haystack1 = "2349534134345w3mentor16504381640386488129";
        $haystack2 = "w3mentor234953413434516504381640386488129";
        $haystack3 = "center234953413434516504381640386488129fyi";

        $pos1 = strpos($haystack1, "w3mentor");
        $pos2 = strpos($haystack2, "w3mentor");
        $pos3 = strpos($haystack3, "w3mentor");

        print("pos1 = ($pos1); type is " . gettype($pos1) . "\n");
        print("pos2 = ($pos2); type is " . gettype($pos2) . "\n");
        print("pos3 = ($pos3); type is " . gettype($pos3) . "\n");
    ?>
```

查找字符串常用函数

  • strstr
    • 查找字符串的首次出现
    • eg
          $email  = 'name@example.com';
          $domain = strstr($email, '@');
          // 打印 @example.com
          echo $domain; 
      
          // 从PHP 5.3.0 起
          $user = strstr($email, '@', true);
          // 打印 name
          echo $user; 
      
  • stristr
    • strstr()函数的忽略大小写版本
  • strpos
    • 查找字符串首次出现的位置
    • 字符串位置是从0开始
    • eg
          $string = 'abc';
          $findme   = 'a';
          $pos = strpos($string, $findme);
          // 0
          var_dump($pos);
      
          // 忽视位置偏移量之前的字符进行查找
          $newstring = 'abcdef abcdef';
          $pos = strpos($newstring, 'a', 1); 
          // 7
          var_dump($pos);
      
  • substr
    • 返回字符串的子串
    • eg
          echo substr('abcdef', 1);     // bcdef
          echo substr('abcdef', 1, 3);  // bcd
          echo substr('abcdef', 0, 4);  // abcd
          echo substr('abcdef', 0, 8);  // abcdef
          echo substr('abcdef', -1, 1); // f
      
          // 访问字符串中的单个字符
          // 也可以使用中括号
          $string = 'abcdef';
          echo $string[0];                 // a
          echo $string[3];                 // d
          echo $string[strlen($string)-1]; // f
      
  • strrchr
    • 查找指定字符在字符串中的最后一次出现
  • strripos
    • 计算指定字符串在目标字符串中最后一次出现的位置
  • stripos
    • 查找字符串首次出现的位置

截取指定2个字符之间字符串

```php
    q : 从 "查找(计组实验)" 中得到 计组实验

    a: 
    function getNeedBetween($kw, $mark1, $mark2)
    {
        $result = "";
        if (empty($kw) || empty($mark1) || empty($mark2)) {
            return $result;
        }
        $st = stripos($kw, $mark1);
        $ed = stripos($kw, $mark2);
        if (($st == false || $ed == false) || $st >= $ed) {
            return $result;
        }
        $result = substr($kw, ($st+1), ($ed-$st-1));
        return $result;
    }

    $keyword = '查找(计组实验)';
    $need = getNeedBetween($keyword, '(' , ')' );
    echo $need;
```

按单词截取字符串

```php
    q : 按单词量截取字符串

    a : 
    function limit_words($string, $word_limit)
    {
        $words = explode(" ",$string);
        return implode(" ", array_splice($words, 0, $word_limit));
    }

    $content = "A B C D E F G";
    echo limit_words($content, 4);
```

中文截取

```php
    q : 中文截取
    a : 
    header("content-type:text/html; charset=UTF-8");
    $string = "你好我好大家好";
    echo strlen($string).'</br>';
    // 按字来分割字符
    echo mb_substr($string,0,4,'UTF-8').'...</br>';
    // 按字节来分割字符
    echo mb_strcut($string,0,4,'UTF-8').'...</br>';
    echo mb_strcut($string,0,6,'UTF-8').'...</br>';

    21
    你好我好...
    你...
    你好...
```