【问题标题】:PHP exploding array to array that has four cellsPHP将数组分解为具有四个单元格的数组
【发布时间】:2014-02-27 20:00:57
【问题描述】:

我正在尝试将我的数组分解为如下所示:

[0] => Array
  (
      [0] => 14 // this is hours
      [1] => 38 // this is minutes
      [2] => 14 // this is hours again
      [3] => 59 // this is minutes again
  )
[1] => Array
  (
      [0] => 15 // this is hours
      [1] => 10 // this is minutes
      [2] => 16 // this is hours again
      [3] => 40 // this is minutes again
  )
  .
  .
  .
 [200] => Array
  (
      [0] => 13 // this is hours
      [1] => 35 // this is minutes
      [2] => 23 // this is hours again
      [3] => 32 // this is minutes again
  )

这是因为我以后会比较这些时间。

我有这样的时间列表:

15:48,16:10 12:01,12:19 13:06,13:28 10:45,11:02

现在我把它放在一个看起来像这样的数组中:

[0] => 16:10,16:36
[1] => 13:06,13:17
.
.
.
[200] => 14:38,14:59

到目前为止我已经尝试过什么

   $length = count($timesArr);
    for($i=0; $i < $length; $i++){
        foreach (explode(',', $timesArr[$i]) as $piece) {


            $timesArray[] = explode(':', $piece);
        }
     }  

这很接近,因为结果输出是这样的:

   [0] => Array
    (
       [0] => 14
       [1] => 38
    )

   [1] => Array
    (
       [0] => 14
       [1] => 59
    )

所以主要问题是我需要如上所示的单元格 0 和 1 位于同一个单元格中

我也可以直接从字符串开始,所以我会爆炸字符串。

【问题讨论】:

  • 您可以使用带有preg_replace_callback() 的正则表达式来处理它

标签: php arrays multidimensional-array explode


【解决方案1】:

你几乎拥有它。从您当前的位置来看,最简单的解决方案是使用 array_merge。

http://uk1.php.net/array_merge

如果您传入前两个(0 和 1),它将把它们组合成一个数组。

【讨论】:

  • 另一种可能性是更改字符串在第一个数组中的存储方式。例如,如果您在将所有冒号存储到 $times[] 之前将它们替换为逗号,那么您只需要执行一次 explode() 而无需使用 array_merge。这当然是假设在这个特定项目中修改存储在 $times[] 中的值是可以接受的。
  • 好吧,我猜数组合并对于这个解决方案来说是不够的,因为这些数组的数量会根据用户文件输入而变化。无论如何感谢您的快速回答! :)
  • 它有什么问题?您可以传入多个数组。不一定只有两个。
【解决方案2】:

preg_split('/[,:]/', $string) 应该在 : 和 , 处分割时间字符串

【讨论】:

    【解决方案3】:

    这是另一个解决方案

    $times = array( "16:10,16:36", '13:06,13:17');
    $startendtimes = array();
    foreach($times as $time){
        list($start,$end) = explode(',',$time);
        list($starthour,$startmin) = explode(':',$start);
        list($endhour,$endmin) = explode(':',$end);
        $startendtimes[] = array( $starthour,$startmin,$endhour,$endmin );
    
    }
    var_dump($startendtimes);
    /* Outputs  
     array (size=2)
      0 => 
        array (size=4)
          0 => string '16' (length=2)
          1 => string '10' (length=2)
          2 => string '16' (length=2)
          3 => string '36' (length=2)
      1 => 
        array (size=4)
          0 => string '13' (length=2)
          1 => string '06' (length=2)
          2 => string '13' (length=2)
          3 => string '17' (length=2)
    */
    

    【讨论】:

      【解决方案4】:

      preg_split() 应该足够了
      这行得通 -

      $timesArr = Array(
          "16:10,16:36",
          "13:06,13:17",
          "14:38,14:59"
      );
      foreach($timesArr as $time){
          $res[] = preg_split("/[\,\:]/",$time);
      }
      var_dump($res);
      /*
      array
        0 => 
          array
            0 => string '16' (length=2)
            1 => string '10' (length=2)
            2 => string '16' (length=2)
            3 => string '36' (length=2)
        1 => 
          array
            0 => string '13' (length=2)
            1 => string '06' (length=2)
            2 => string '13' (length=2)
            3 => string '17' (length=2)
        2 => 
          array
            0 => string '14' (length=2)
            1 => string '38' (length=2)
            2 => string '14' (length=2)
            3 => string '59' (length=2)
      */
      

      【讨论】:

        【解决方案5】:

        这很简单,虽然preg_split() 很酷:

        $string = '15:48,16:10 12:01,12:19 13:06,13:28 10:45,11:02';
        
        $array = array_chunk(explode(':', str_replace(array(',',' '), ':', $string)), 4);
        
        print_r($array);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-03-10
          • 1970-01-01
          • 1970-01-01
          • 2012-03-29
          • 1970-01-01
          • 2011-09-10
          • 1970-01-01
          相关资源
          最近更新 更多