【问题标题】:How to split an array based on a certain value?如何根据某个值拆分数组?
【发布时间】:2012-02-20 00:13:26
【问题描述】:

我目前有一组类似于下面的基于位置的信息(已按时间排序)。第一个键/值是表示旅程开始 (00)、跑步旅程 (01) 和旅程结束 (10) 的事件。

Array ( 
[0] => Array ( [event] => 00 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
[1] => Array ( [event] => 01 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
[2] => Array ( [event] => 01 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
[3] => Array ( [event] => 01 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
[4] => Array ( [event] => 01 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
[5] => Array ( [event] => 10 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
[6] => Array ( [event] => 00 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
[7] => Array ( [event] => 01 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
[8] => Array ( [event] => 01 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
[9] => Array ( [event] => 01 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
[10] => Array ( [event] => 01 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
[11] => Array ( [event] => 01 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
[12] => Array ( [event] => 01 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
[13] => Array ( [event] => 10 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
[14] => Array ( [event] => 00 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
[15] => Array ( [event] => 01 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
[16] => Array ( [event] => 01 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
[17] => Array ( [event] => 01 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
[18] => Array ( [event] => 10 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
)

如何进一步拆分数组,以便为​​每次旅程创建一个新数组,所以我最终会得到这个:

Array (
[0] => Array (
[0] => Array ( [event] => 00 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
[1] => Array ( [event] => 01 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
[2] => Array ( [event] => 01 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
[3] => Array ( [event] => 01 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
[4] => Array ( [event] => 01 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
[5] => Array ( [event] => 10 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
)
[1] => Array (
[0] => Array ( [event] => 00 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
[1] => Array ( [event] => 01 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
[2] => Array ( [event] => 01 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
[3] => Array ( [event] => 01 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
[4] => Array ( [event] => 01 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
[5] => Array ( [event] => 01 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
[6] => Array ( [event] => 01 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
[7] => Array ( [event] => 10 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
)
...
)

我还没有尝试过任何东西(除了谷歌搜索),因为我真的不知道从哪里开始。

【问题讨论】:

    标签: php arrays multidimensional-array


    【解决方案1】:

    您需要这样的自定义解决方案:

     $outputArray = array(); $currentArray = array();
     foreach($inputArray as $key=>$subArray) {
       if($subArray['event']==00) {
          $outputArray[] = $currentArray;
          $currentArray = array($subArray);
       } else {
          $currentArray[] = $subArray;
       }
     }
     $outputArray[] = $currentArray;
     array_shift($outputArray);
    

    放入$inputArray,然后取出$outputArray。享受吧!

    【讨论】:

    • 它几乎可以工作。不过似乎错过了最后一个。 - $outputArray 数组(3) 数组(0) 数组(6) 数组(8)
    • 你是对的...尝试新的编辑,它应该可以工作。对不起。
    • 天才 ;) 现在我将通过它,希望向你学习!
    【解决方案2】:

    试试这个:

    $journey = array ( 
    [0] => Array ( [event] => 00 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
    [1] => Array ( [event] => 01 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
    [2] => Array ( [event] => 01 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
    [3] => Array ( [event] => 01 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
    [4] => Array ( [event] => 01 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
    [5] => Array ( [event] => 10 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
    [6] => Array ( [event] => 00 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
    [7] => Array ( [event] => 01 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
    [8] => Array ( [event] => 01 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
    [9] => Array ( [event] => 01 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
    [10] => Array ( [event] => 01 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
    [11] => Array ( [event] => 01 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
    [12] => Array ( [event] => 01 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
    [13] => Array ( [event] => 10 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
    [14] => Array ( [event] => 00 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
    [15] => Array ( [event] => 01 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
    [16] => Array ( [event] => 01 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
    [17] => Array ( [event] => 01 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
    [18] => Array ( [event] => 10 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 )
    )
    
    $journeygrouping = array();
    
    while(!empty($journey)){
    $temp = array_pop($journey);
    
    if(isset($journeygrouping[$temp['event']])){
      array_push($journeygrouping[$temp['event']], $temp);
    } else {
      $journeygrouping[$temp['event']] = array();
      array_push($journeygrouping[$temp['event']], $temp);
    }
    }
    

    这段代码应该创建一个数组结构,如:

    array(
    [00] => array([0] => array([event] => 00 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111) [1]=>array ( [event] => 00 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111 ))
    [01] => array([0]=>array ( [event] => 01 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111) [1]=>array ( [event] => 01 [time] => 1329293878 [lat] => 66.66666 [lon] => 11.11111)  )
    );
    

    等等……

    【讨论】:

    • 但这会根据事件而不是每个旅程创建一个分组数组?还是我错过了什么? $journeygrouping 数组 (3) '10' => 数组 (3) '1' => 数组 (13) '0' => 数组 (3)
    猜你喜欢
    • 2013-04-07
    • 1970-01-01
    • 2018-06-17
    • 2013-12-04
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多