2012-09-11 463 views
0

我開發一個測試,這將給2個值如何使用多維數組中的值對多維數組進行排序?

$result = array('t' => 10, 's' => 20); 

和我有範圍,這將使如徽章名從陣列到該結果的響應的結果:

$badges = array(
    'badge1' => array(
     array('tLow' => 0, 'tHigh' => 20), 
     array('sLow' => 0, 'sHigh' => 10) 
    ), 
    'badge2' => array(
     array('tLow' => 0, 'tHigh' => 10), 
     array('sLow' => 11, 'sHigh' => 20) 
    ), 
    'badge3' => array(
     array('tLow' => 21, 'tHigh' => 30), 
     array('sLow' => 0, 'sHigh' => 10) 
    ), 
    'badge4' => array(
     array('tLow' => 31, 'tHigh' => 40), 
     array('sLow' => 0, 'sHigh' => 10) 
    ), 
    'badge5' => array(
     array('tLow' => 11, 'tHigh' => 30), 
     array('sLow' => 11, 'sHigh' => 30) 
    ), 
    'badge6' => array(
     array('tLow' => 0, 'tHigh' => 10), 
     array('sLow' => 21, 'sHigh' => 30) 
    ), 
    'badge7' => array(
     array('tLow' => 0, 'tHigh' => 10), 
     array('sLow' => 31, 'sHigh' => 40) 
    ), 
); 

徽章陣列對應到一個看起來像這樣的網格

+---+ 
| 7 | 
+---+---+---+ 
| 6 |  | 
+---+ 5 + 
| 2 |  | 
+---+---+---+---+ 
| 1 | 3 | 4 | 
+---+---+---+---+ 

所以我的問題是什麼是最有效的方式來獲得我的結果徽章?也許有更好的方法呢?

+1

請添加適當的語言標籤。 –

+1

我不認爲這是語言依賴的任何方式,我很好用僞代碼。我不想過濾掉那些不喜歡PHP的人:) :) – Nick

+0

OK - 這種問題有一個「language-agnostic」標籤,但如果問題真的是語言不可知的,那麼你應該使用僞代碼,因爲不是每個人可以讀取php/perl /無論。 –

回答

2

在我的頭頂,你可以做這樣的事情。

foreach ($badges as $key => $badge) 
{ 
    if ($result['t'] >= $badge[0]['tLow'] && $result['t'] <= $badge[0]['tHigh']) 
    { 
     // t matches 
     if ($result['s'] >= $badge[0]['sLow'] && $result['s'] <= $badge[0]['sHigh']) 
     { 
     // s matches 
     echo 'Badge was found: '.$key; 
     break; 
     } 
    } 
} 

此代碼未經測試。但應該工作

+0

如果您在if語句中將'$ badge ['tLow']'更改爲'$ badge [0] ['tLow']'和3個其他模式,它將會正常工作。在回聲之後,明智地休息一下;聲明,所以它發現後,它停止。除此之外,非常感謝! – Nick

+0

是 - 同意...忘了嵌套數組。我更新了答案... – Joseph