我有以下陣列:
array (size=8) 0 => array (size=5) 'entity_id' => int 571962 'time' => int 1671101084788 'time to datetime' => string '2022-12-15 11:44:44' (length=19) 'PhaseId_new' => string 'Close' (length=5) 'PhaseId_old' => string 'Accept' (length=6) 1 => array (size=5) 'entity_id' => int 571962 'time' => int 1671100537178 'time to datetime' => string '2022-12-15 11:35:37' (length=19) 'PhaseId_new' => string 'Accept' (length=6) 'PhaseId_old' => string 'Fulfill' (length=7) 2 => array (size=5) 'entity_id' => int 571962 'time' => int 1671100012012 'time to datetime' => string '2022-12-15 11:26:52' (length=19) 'PhaseId_new' => string 'Fulfill' (length=7) 'PhaseId_old' => string 'Review' (length=6) 3 => array (size=5) 'entity_id' => int 571962 'time' => int 1671099984979 'time to datetime' => string '2022-12-15 11:26:24' (length=19) 'PhaseId_new' => string 'Review' (length=6) 'PhaseId_old' => string 'Accept' (length=6) 4 => array (size=5) 'entity_id' => int 571962 'time' => int 1671099802675 'time to datetime' => string '2022-12-15 11:23:22' (length=19) 'PhaseId_new' => string 'Accept' (length=6) 'PhaseId_old' => string 'Fulfill' (length=7) 5 => array (size=5) 'entity_id' => int 571962 'time' => int 1671027321749 'time to datetime' => string '2022-12-14 15:15:21' (length=19) 'PhaseId_new' => string 'Fulfill' (length=7) 'PhaseId_old' => string 'Approve' (length=7) 6 => array (size=5) 'entity_id' => int 571962 'time' => int 1671011168777 'time to datetime' => string '2022-12-14 10:46:08' (length=19) 'PhaseId_new' => string 'Approve' (length=7) 'PhaseId_old' => string 'Log' (length=3) 7 => array (size=5) 'entity_id' => int 571962 'time' => int 1671011166077 'time to datetime' => string '2022-12-14 10:46:06' (length=19) 'PhaseId_new' => string 'Log' (length=3) 'PhaseId_old' => null
我使用 entity_id
重新分組了每個子數組:
$result = array(); foreach ($data as $element) { //var_dump($element); $result[$element['entity_id']][] = $element; }
哪個輸出我:
array (size=1) 571962 => array (size=8) 0 => array (size=5) 'entity_id' => int 571962 'time' => int 1671101084788 'time to datetime' => string '2022-12-15 11:44:44' (length=19) 'PhaseId_new' => string 'Close' (length=5) 'PhaseId_old' => string 'Accept' (length=6) 1 => array (size=5) 'entity_id' => int 571962 'time' => int 1671100537178 'time to datetime' => string '2022-12-15 11:35:37' (length=19) 'PhaseId_new' => string 'Accept' (length=6) 'PhaseId_old' => string 'Fulfill' (length=7) 2 => array (size=5) 'entity_id' => int 571962 'time' => int 1671100012012 'time to datetime' => string '2022-12-15 11:26:52' (length=19) 'PhaseId_new' => string 'Fulfill' (length=7) 'PhaseId_old' => string 'Review' (length=6) 3 => array (size=5) 'entity_id' => int 571962 'time' => int 1671099984979 'time to datetime' => string '2022-12-15 11:26:24' (length=19) 'PhaseId_new' => string 'Review' (length=6) 'PhaseId_old' => string 'Accept' (length=6) 4 => array (size=5) 'entity_id' => int 571962 'time' => int 1671099802675 'time to datetime' => string '2022-12-15 11:23:22' (length=19) 'PhaseId_new' => string 'Accept' (length=6) 'PhaseId_old' => string 'Fulfill' (length=7) 5 => array (size=5) 'entity_id' => int 571962 'time' => int 1671027321749 'time to datetime' => string '2022-12-14 15:15:21' (length=19) 'PhaseId_new' => string 'Fulfill' (length=7) 'PhaseId_old' => string 'Approve' (length=7) 6 => array (size=5) 'entity_id' => int 571962 'time' => int 1671011168777 'time to datetime' => string '2022-12-14 10:46:08' (length=19) 'PhaseId_new' => string 'Approve' (length=7) 'PhaseId_old' => string 'Log' (length=3) 7 => array (size=5) 'entity_id' => int 571962 'time' => int 1671011166077 'time to datetime' => string '2022-12-14 10:46:06' (length=19) 'PhaseId_new' => string 'Log' (length=3) 'PhaseId_old' => null
現在我需要計算每個階段的持續時間(記錄、批准、履行、接受、審核)。
例如:
日誌:1671011168777 - 1671011166077 = 2700
#批准:1671027321749 - 1671011168777 = 16152972
實作:(1671100537178 - 1671100012012) (1671099802675 - 1671027321749) = 73006092
##接受:(1671101084788 - 1671100537178) (1671099984979 - 1671099802675) = 729914
評論:1671100012012 - 1671099984979 = 27033
#我能夠使用以下方法解析每個階段:
foreach($result as $key => $val){ //var_dump($key); foreach($val as $key2 => $val2){ if($val2['PhaseId_new'] == 'Fulfill' or $val2['PhaseId_old'] == 'Fulfill'){ // var_dump($val2); } } }
但是我不清楚如何計算每個階段的持續時間。
預期結果如下:
array (size=1) 571962 => array (size=8) 'Log' => int 2700 'Approve' => int 16152972 'Fulfill' => int 73006092 'Accept' => int 729914 'Review' => int 27033
PHP線上:https://onlinephp.io/c/2270e
工作流程:
嘗試這樣的事情。
這給你:
好吧,這花了我比我想要的更長的時間,但我得到了結果。首先是程式碼:
請參閱:https://onlinephp.io/c/92d7f
#結果是:
現在解釋一下:
首先,您的資料數組看起來是顛倒的,因此我使用
array_reverse()
來解決它。這裡的假設是存在邏輯順序。由於可能需要將多個週期相加,因此我使用一個名為
$durations
的陣列來將它們相加。然後在內部循環中,如果有舊的階段 ID,我可以計算持續時間並將其相加。最後我記得舊的階段,因為我在循環的下一個迭代中需要它。
我還重命名了很多東西,使其名稱能夠傳達變數的內容。