2012-02-20 78 views
1

我目前有一系列基於位置的信息,類似於以下(已按時間排序)。第一個鍵/值是表示旅程(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) 
) 
... 
) 

我還沒有嘗試任何事情(除了谷歌搜索),因爲我真的不知道從哪裏開始。

回答

2

你需要一個定製的解決方案,像這樣:

$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。請享用!

+0

它幾乎工作。似乎錯過了最後一關。 - $ outputArray array(3) array(0) array(6) array(8) – 7wonders 2012-02-20 00:49:12

+0

你是正確的...嘗試新的編輯,它應該工作。 Sr about。 – hackartist 2012-02-20 00:54:35

+1

天才;)現在我會經歷它,並希望向您學習! – 7wonders 2012-02-20 01:01:05

1

試試這個:

$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) ) 
); 

等等...

+0

但是,這會根據事件創建分組數組,而不是每個旅程?或者我錯過了什麼? $ journeygrouping array(3) '10'=> array(3) '1'=> array(13) '0'=> array(3) – 7wonders 2012-02-20 00:53:34