【问题标题】:PHP - Convert String to Multiple ArraysPHP - 将字符串转换为多个数组
【发布时间】:2014-10-14 09:27:53
【问题描述】:

我正在为此苦苦挣扎..

我有一个这样的字符串。

$test2 = "AB:001,003;AC:001,003,004,005,008;AD:002,003,004,007,008,009";

是两个字母:3位数字,(这个可以重复);

这个字符串会有多个 2 字母前缀,3 位数条目的数量会有所不同。

我需要能够在 2 个字母前缀和相关的 3 位数字之间找到匹配项。

EG: AD003 是否存在于字符串中?我知道 003 出现了多次,但我只想找到 AD003,或者我查询的另一个匹配项。

我认为将字符串转换为以 2 个字母前缀命名的单个数组是可行的方法..

$AB = array('001','003');
$AC = array('001','003','004',008);
$AD = array('002','003','004','007','008','009');

我已经在;: 上爆炸了它

$parts =  explode(";",$test2) ;
foreach ($parts as $value) {
    $a[] = explode(":", $value);
}
print_r ( $a );            

这会导致:

Array
(
    [0] => Array
        (
            [0] => AB
            [1] => 001,002,003
        )

    [1] => Array
        (
            [0] => AC
            [1] => 001,003,004,005
        )

    [2] => Array
        (
            [0] => AD
            [1] => 002,003,004
        )

)

但我不知道如何更进一步。

我希望能够在数组中搜索特定匹配项:

if (in_array("003", $AD)) { 
    echo "Match";
}

如果有比转换为数组更简单的方法来在字符串中查找 AD003,那么我很乐意尝试。

谢谢

【问题讨论】:

    标签: php arrays string search


    【解决方案1】:

    或者你可以简单地使用 preg_match 来检查字符串

    $string = "AB:001,003;AC:001,003,004,005,008;AD:002,003,004,007,008,009";
    
    if( preg_match('/AD:([0-9,]+)?003/',$string)){
    //Your code here
    }
    

    【讨论】:

    • 这似乎是您要搜索的查询的最佳解决方案
    • 谢谢,这似乎是最简单的解决方案。这样做if( ! preg_match('/AD:([0-9,]+)?003/',$string)){有什么问题吗?谢谢
    • @Rocket 绝对没有
    • ?没有没有问题?还是不做? :) 谢谢
    【解决方案2】:

    使用第一个数组值作为键:

    $parts = explode(":", $value);
    $key = array_shift($parts);
    $a[$key] = $parts;
    

    那么你可以这样做:

    if(isset($a['AD']) && in_array("003", $a['AD']))
      ...
    

    【讨论】:

      【解决方案3】:
      $test2 = "AB:001,003;AC:001,003,004,005,008;AD:002,003,004,007,008,009";
      
      $parts = explode( ';', $test2 );
      foreach( $parts as $value ) {
          list( $key, $digits ) = explode( ':', $value );
          $a[$key] = explode( ',', $digits );
      }
      
      print_r( $a );
      
      if( !empty( $a['AB'] ) && in_array( '003', $a['AB'] ) ) {
          echo "Yep, it's there.";
      }
      

      结果如下:

      Array
      (
          [AB] => Array
              (
                  [0] => 001
                  [1] => 003
              )
      
          [AC] => Array
              (
                  [0] => 001
                  [1] => 003
                  [2] => 004
                  [3] => 005
                  [4] => 008
              )
      
          [AD] => Array
              (
                  [0] => 002
                  [1] => 003
                  [2] => 004
                  [3] => 007
                  [4] => 008
                  [5] => 009
              )
      
      )
      Yep, it's there.
      

      【讨论】:

        【解决方案4】:

        试试这个

        <?php
        
        $test2 = "AB:001,003;AC:001,003,004,005,008;AD:002,003,004,007,008,009";
        
        $final = array();
        $parts =  explode(";",$test2) ;
        foreach ($parts as $value) {
        
            $a = explode(":", $value);
            foreach(explode(",", $a[1])as $val)
            {
               $final[$a[0].$val] =  $val;     
            }
        
        }
        
        echo "<pre>";
        print_r ($final);
        

        结果将是

        Array
        (
            [AB001] => 001
            [AB003] => 003
            [AC001] => 001
            [AC003] => 003
            [AC004] => 004
            [AC005] => 005
            [AC008] => 008
            [AD002] => 002
            [AD003] => 003
            [AD004] => 004
            [AD007] => 007
            [AD008] => 008
            [AD009] => 009
        )
        

        您可以使用array_key_exists('AB001',$array);检查值AB001是否存在

        【讨论】:

        • 除正则表达式之外的其他第二个最佳解决方案,可用于搜索您的查询
        【解决方案5】:

        你可以试试这个

        <?php
        // Example 1
        $apple = "apple1 apple2 apple3 apple4 apple5 apple6";
        $apples = explode(" ", $apple);
        echo $apples[0]; // apple1
        echo $apples[1]; // apple2...........
        
        ?>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-07
          • 2016-04-02
          • 1970-01-01
          • 2018-01-29
          • 2013-08-12
          • 2021-12-27
          相关资源
          最近更新 更多