2015-05-20 72 views
-4

我校的合唱團每年在情人節執行歌唱情人節。合唱團全天從班級到班級唱歌,向從朋友或其他人處收到情人節的人唱歌。基於多個規則對物品進行排序

我們每年銷售約1000首歌唱情人節。這些都需要根據規則過多進行排序 - 例如:

  • 沒有一個節課的時間總共可以有更多的150個情人節的。 (有五組歌手,我們已經發現每個組在每個階段的交付時間超過30個情人在邏輯上是不可能的。)
  • 任何情緒接受者在零或第七週期的課程安排中都必須上課在零或七週期內收到情人節禮物。
  • 歌唱情人節的負荷應該儘可能地在整個一天中均勻分佈,以便在第三階段不會有150個情人節,第四個階段則不會有20個情人節。
  • 五組歌手中的每一組歌手都應該將他們的送貨放在相同的相對區域,以儘量減少在運輸過程中浪費的時間。

這個名單還在繼續。目前,所有1000個情人節正在手動分揀,這是無效的。我正在考慮製作一個PHP或JS腳本來自動化這個過程。這裏是我想象它:

  1. 在購買情人節,學生將填寫一份谷歌形成他們的名字,則收件人的姓名堂課在此期間,他們更喜歡接收者收到他或她的情人。

  2. 腳本將從生成的電子表格中逐行讀取數據,併爲每行創建一個情人節對象

  3. 對於每一個情人節對象,該腳本將查找收件人的時間表和房間號碼添加自己的日程,以情人節對象對象變量的形式/屬性(即$間隔1 = 312種手段收件人的第一個時期的階級是312室)

    • 這部分可能不得不用手在谷歌電子表格完成的腳本讀取其數據之前,因爲我不知道,我將有機會獲得學校數據庫。
  4. 這裏是我卡住的部分。一旦腳本有1000個左右的情人對象的列表,每個都有自己的$發件人,$ RECP,通過$ period7,$ prefPeriod值,不知何故,該腳本將排序每個對象到$ period0根據上述規則和每個對象中的數據確定適當的課程時間段

如果PHP不是最好的工作語言,我願意接受建議。我最初選擇PHP是因爲它是我最熟悉的語言。

對此的任何幫助將不勝感激。

TL; DR:我需要根據幾個使用這些對象屬性中的數據的規則將對象分類。

+1

你的問題太長了,主要關注背景,而不是直截了當。 –

+0

^因此**粗體**部分和TL; DR在最後。 –

回答

0

看看usort()。它允許您使用任何用戶功能進行排序。在該功能中,您可以根據需要比較對象。在下面的例子中,我比較它們的屬性:property1property2

<?php 
$obj1 = new \StdClass; 
$obj2 = new \StdClass; 
$obj3 = new \StdClass; 
$obj1->property1 = '1'; 
$obj2->property1 = '2'; 
$obj3->property1 = '2'; 
$obj1->property2 = '1'; 
$obj2->property2 = '1'; 
$obj3->property2 = '2'; 
$objs = [$obj2, $obj1, $obj3]; //after sorting, it should be obj1, obj2, obj3 

//first we sort by property1, then by property2 
usort($objs, function($a, $b) 
{ 
    $result = strcmp($a->property1, $b->property1); 
    if ($result === 0) 
     $result = strcmp($a->property2, $b->property2); 
    return $result; 
}); 

print_r($objs); 

結果:

Array 
(
    [0] => stdClass Object 
     (
      [property1] => 1 
      [property2] => 1 
     ) 
    [1] => stdClass Object 
     (
      [property1] => 2 
      [property2] => 1 
     ) 
    [2] => stdClass Object 
     (
      [property1] => 2 
      [property2] => 2 
     ) 
) 

完全排序!

基本上,如果對象相等,您的自定義函數應該返回1,-1或0。 strcmp是完美的,因爲它返回兼容的值。要按多個屬性進行排序,我們通過將第一個結果與0進行比較來檢查兩個對象是否具有相同的property1。如果它們相同,則比較property2。正如你所看到的,這可以進一步擴展到其他屬性,輕鬆。

相關問題