2012-09-11 222 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