【问题标题】:PHP: Split string that needed [closed]PHP:需要的拆分字符串[关闭]
【发布时间】:2020-08-13 08:33:57
【问题描述】:

根据我上面的问题,下面是

$staff1 = "Peter Sondak (Top Pop - F09)";
$staff2 = "James Rodri (Top Pop - F12)";
$staff3 = "Allan Kang (Top Pop - F31)";

echo $staff1;
echo "<br>";
echo $staff2;
echo "<br>";
echo $staff3;

结果会是这样的

彼得·桑达克(*手套 - F09)

詹姆斯·罗德里(*手套 - F12)

Allan Kang(*手套 - F31)

FYI、F09、F12 和 F31 代表工厂。现在,我想通过只显示工厂来拆分它,例如 F09,不包括名称。

谁能帮帮我?

【问题讨论】:

  • 你为什么不用an array?考虑到您的代码是硬编码的
  • 到目前为止你尝试过什么?你被困在哪里了?

标签: php split


【解决方案1】:

您可以使用regular expressions 在您的字符串中进行搜索。

$staff = "Peter Sondak (Top Pop - F09)";
preg_match("/\((.*?)\)/", $staff, $matches);

var_dump($matches);

您可以使用regexr 之类的在线工具来玩弄您的正则表达式并对其进行调整(有很多这样的网站,这只是一个示例)

【讨论】:

    【解决方案2】:

    您可以使用regular expression 来解析两个字符之间的substring

    $staffList = [ "Peter Sondak (Top Pop - F09)", "James Rodri (Top Pop - F12)", "Allan Kang (Top Pop - F31)" ];
    function getFactory($staff){
         preg_match_all('/-(.*)\)/', $staff, $matches);
         return trim($matches[1][0]);
    }
    for($i = 0; $i < count($staffList); $i++)
         echo getFactory($staffList[$i]) . "<br>";
    

    输出:

    F09
    F12
    F31
    

    【讨论】:

    • 当数据在循环中时出现这个错误,Cannot redeclare getFactory() (之前在C:\xampp\htdocs\ldap\index2.php:119中声明)
    • 你应该声明一次函数。我更新了答案以使用循环。
    【解决方案3】:
    <?php
    function get_factory($full)
    {
      preg_match_all("/\\((.*?)\\)/", $full, $factory);
      $factory = $factory[1][0];
      $factory = substr($factory, strpos($factory, " - F") + 4);
      $factory = "F".$factory;
      return $factory;
    }
    ?>
    <?php
        $staff1 = "Peter Sondak (Top Pop - F09)";
        $staff2 = "James Rodri (Top Pop - F12)";
        $staff3 = "Allan Kang (Top Pop - F31)";
    
        echo get_factory($staff1);
        echo "<br>";
        echo get_factory($staff2);
        echo "<br>";
        echo get_factory($staff3);
    ?>
    
    

    【讨论】:

      【解决方案4】:

      我想这可能对你有帮助。

       function factory($staff) {
       $a = preg_match("/(?<=\-\s).+(?=\))/",$staff,$arr);
       return $arr[0];
       }
       
      $staff1 = "Peter Sondak (Top Pop - F09)";
      echo factory($staff1);
      

       function factory(...$staff) {
       $arr = [];  
       foreach($staff as $staf) {
       $a = preg_match("/(?<=\-\s).+(?=\))/",$staf,$array);
       $arr[] = $array[0];     
       }   
       return $arr;
       }
       
          $staff1 = "Peter Sondak (Top Pop - F09)";
          $staff2 = "James Rodri (Top Pop - F12)";
          $staff3 = "Allan Kang (Top Pop - F31)";
          print_r(factory($staff1,$staff2,$staff3));
      

      【讨论】: