【问题标题】:Explode string with two different separators to create multidimensional array用两个不同的分隔符分解字符串以创建多维数组
【发布时间】:2016-08-26 05:40:36
【问题描述】:

我有一个字符串:

01;Tommy;32;Coder&&02;Annie;20;卖家

我想要这样:

array (size=2)
0 => 
array (size=4)

  0 => string '01' (length=2)

  1 => string 'Tommy' (length=5)

  2 => int 42

  3 => string 'Coder' (length=5)  

1 => 
array (size=4)

  0 => string '02' (length=2)

  1 => string 'Annie' (length=5)

  2 => int 20

  3 => string 'Seller' (length=6)

希望你能帮助我,谢谢!

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    不确定数据类型是否匹配(因为我相信它都在一个字符串中)但这里是代码

     $myarray = array();
     foreach(explode("&&",$mystring) as $key=>$val)
     {
     $myarray[] = explode(";",$val);
     }
    

    explode 命令接受一个字符串并将其转换为基于某个“拆分键”的数组,在您的情况下是 &&
    但由于这是一个双数组,我不得不通过一个 foreach 和另一个 explode 来解决它。

    【讨论】:

    • 你在 foreach 中调用explode() 需要退出循环并在 foreach 中使用变量
    • 除非你在做一个大系列,否则你不需要跳出循环。肯定会慢一些,但是 2 元素数组上的 0.0003 与 0.0004 秒(外部与内联)并没有真正造成任何伤害。 stackoverflow.com/questions/5861826/…
    【解决方案2】:

    这很简单。首先你需要通过&& 分解字符串,然后遍历&& 分解的数组。并将数组的每个元素分解为;

    这样,

    <?php
    
    $str="01;Tommy;32;Coder&&02;Annie;20;Seller";
    
    $array=explode("&&",$str);
    
    foreach($array as $key=>$val){ 
        $array[$key]=explode(";",$val);
    }
    print_r($array);
    

    演示:https://eval.in/629507

    【讨论】:

      【解决方案3】:

      你应该只需要分割'&&',然后用';'分割结果创建新的二维数组:

      // $string = '01;Tommy;32;Coder&&02;Annie;20;Seller';
      
      // declare output
      $output = [];
      
      // create array of item strings
      $itemarray = explode('&&',$string);
      // loop through item strings
      foreach($itemarray as $itemstring) {
        // create array of item values
        $subarray = explode(';',$itemstring);
        // cast age to int
        $subarray[2] = (int) $subarray[2]; // only useful for validation
        // push subarray onto output array
        $output[] = $subarray;
      }
      
      // $output = [['01','Tommy',32,'Coder'],['02','Annie',20,'Seller']];
      

      请记住,由于 php 变量没有类型,将字符串转换为整数或将整数保留为字符串只会持续取决于值的使用方式,但是变量类型转换可以帮助验证数据并保留错误类型的值出你的对象。

      祝你好运!

      【讨论】:

        【解决方案4】:

        还有另一种解决这个问题的方法。这里我使用了array_map() 和匿名函数:

        $string = '01;Tommy;32;Coder&&02;Annie;20;Seller';
        
        $result = array_map(function($value){return explode(';',$value);}, explode('&&', $string));
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-12-27
          • 2015-06-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多