2
我想以「特殊」的方式合併2個PHP數組。我想「合併」重疊的時間戳。例如拿這些陣列:PHP合併2數組與開始/結束時間戳
array (size=6) 0 =>
array (size=2)
'starttime' => int 1397635320
'endtime' => int 1397635440
1 =>
array (size=2)
'starttime' => int 1397635740
'endtime' => int 1397635920
2 =>
array (size=2)
'starttime' => int 1397636700
'endtime' => int 1397637300
3 =>
array (size=2)
'starttime' => int 1397641260
'endtime' => int 1397641980
4 =>
array (size=2)
'starttime' => int 1397642640
'endtime' => int 1397642760
5 =>
array (size=2)
'starttime' => int 1397643240
'endtime' => int 1397647740
和:
array (size=3)
1 =>
array (size=2)
'starttime' => int 1397636580
'endtime' => int 1397637300
2 =>
array (size=2)
'starttime' => int 1397641080
'endtime' => int 1397641980
3 =>
array (size=2)
'starttime' => int 1397643120
'endtime' => int 1397647800
我們可以顯示此爲:
我想給bottem一個合併到最上面的一個,但它是可能的例如,最底層的一個例子從頂層開始,所以在統計的情況下,我必須從底層開始一個! (永遠的「最長」的時間內)
我已經嘗試了幾個小時,但我仍然不能得到我想要的輸出(一個數組的「最長」的時間跨度可能)
只是一些代碼,我試過:
public static function mergeOutageArrays($db_outages, $report_outages)
{
$returnarray = array();
foreach($db_outages as $db_outage)
{
$db_starttime = $db_outage['starttime'];
$db_endtime = $db_outage['endtime'];
//now match this with report outages
foreach ($report_outages as $report_outage)
{
$report_starttime = $report_outage['starttime'];
$report_endtime = $report_outage['endtime'];
if($db_starttime == $report_starttime && $db_endtime == $report_endtime) //easy, everything matches
$returnarray[] = $report_outage;
else if($db_starttime == $report_starttime && $db_endtime <= $report_endtime)//seems the db end time falls short, use report
$returnarray[] = $report_outage;
else if($db_starttime == $report_starttime && $db_endtime > $report_endtime)//seems the report end time falls short, use db
$returnarray[] = $db_outage;
else if($db_starttime <= $report_starttime && $db_endtime == $report_endtime)//seems report starts to late, use db
$returnarray[] = $db_outage;
else if($db_starttime > $report_starttime && $db_endtime == $report_endtime)//seems db starts to late, use report
$returnarray[] = $report_outage;
elseif($db_starttime <= $report_starttime && $db_endtime > $report_endtime)//we want db
$returnarray[] = $db_outage;
elseif($db_starttime > $report_starttime && $db_endtime <= $report_endtime)//we want report
$returnarray[] = $report_outage;
else
//what here
}
}
return $returnarray;
}
但是我沒有得到我想要的。有人可以指點我正確的方向,或者如果有人有一些例子代碼將是太棒了!
同樣,我需要檢查每個元素是否(部分)「在」開始/結束之間,我已經有了,是否更大「擴大」(或復發)原始條目。例如,如果它適合它,意味着我已經有了它,所以我不需要那個條目。
編輯:如果你想使用我的數據
$outage_array = array();
$outage_array[] = array(1397635320, 1397635440);
$outage_array[] = array(1397635740, 1397635920);
$outage_array[] = array(1397636700, 1397637300);
$outage_array[] = array(1397641260, 1397641980);
$outage_array[] = array(1397642640, 1397642760);
$outage_array[] = array(1397643240, 1397647740);
$report_array = array();
$report_array[] = array(1397636580, 1397637300);
$report_array[] = array(1397641080, 1397641980);
$report_array[] = array(1397643120, 1397647800);
編輯 新增複製/粘貼:我會試着更好地描述它:
採取這一形象:
我有2個數組(紅色條),我想合併結果得到藍色的條:)
感謝您的回覆,但不幸的是,這不是我所需要的。我用一張新圖片更新了我的問題,希望能更好地解釋我需要的東西。 – Matthijs
@Matthijs,因爲你的中間情況(你從一個數組開始,結束另一個數組),你必須單獨檢查開始和結束,並從適合的開始和結束分配。你能告訴我哪些情況下我的代碼不起作用嗎?當我用你的紅色輸入工作通過我的代碼時,我得到一個映射到你的藍色輸出的數組。 –