【问题标题】:How to sort a multidimensional array with values from multidimensional array?如何使用多维数组中的值对多维数组进行排序?
【发布时间】:2012-09-04 02:53:44
【问题描述】:

我正在开发一个测试,它会给出 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 |
+---+---+---+---+

所以我的问题是为我的结果获得徽章的最有效方法是什么?也许有更好的方法来解决这个问题?

【问题讨论】:

  • 请添加适当的语言标签。
  • 我不认为它以任何方式依赖于语言,我对伪代码很好。我不想过滤掉不喜欢 PHP 的人 :)
  • 好的 - 这类问题有一个 language-agnostic 标签,但如果问题与语言无关,您可能应该使用伪代码,因为不是每个人都能阅读 php/perl/whatever。跨度>

标签: php arrays algorithm perl


【解决方案1】:

你可以做这样的事情。

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;
      }
   }
}

此代码未经测试。但应该工作

【讨论】:

  • 如果您在 if 语句中以相同的模式将 $badge['tLow'] 更改为 $badge[0]['tLow'] 和其他 3 个,它将正常工作。在 echo 之后也明智地休息一下;声明,因此它在找到某些东西后停止。除此之外非常感谢!
猜你喜欢
  • 2019-11-26
  • 1970-01-01
  • 2012-06-10
  • 2021-07-11
  • 2011-03-17
相关资源
最近更新 更多