根据优先级列表获取最佳数组值

时间:2010-10-30 00:43:12

标签: php arrays integer

我会尽力解释这个。

我有一个名为$linkSets的数组,它的数组内容如下:

<string>,<integer>
<string>,<integer>
<string>,<integer>

我还有一个优先级列表,按顺序排列:22 -> 18 -> 35 -> 34。我想检查$linkSets数组中的每个整数,并根据<string>从同一数组条目中获得最佳<integer>

我编写的代码如下:

foreach($linkSets as $link)
{
    $parts = explode(',', $link);
    if($parts[1] == 22) {
        $best = $parts[0];
        break;
    }
    if($parts[1] == 18) {
        $best = $parts[0];
        break;
    }
    if($parts[1] == 35) {
        $best = $parts[0];
        break;
    }
    if($parts[1] == 34) {
        $best = $parts[0];
        break;
    }
}
echo "best: $best";

但是你可能看到它不起作用,它不遵守优先级列表。

如果不多次遍历$linkSets数组,我想不出任何方法可以做到这一点。

1 个答案:

答案 0 :(得分:2)

有数百种方法可以解决这个问题,这里有一个相对简单的方法:

$tmp = array();
foreach($linkSets as $link)
{
    $parts = explode(',', $link);
    $tmp[$parts[1]] = $parts[0];
}

$priority = array(22, 18, 35, 34);    
$best = false;

foreach($priority as $p) {
    if(isset($tmp[$p])) {
        $best = $tmp[$p];
        break;
    }
}

echo "best: $best";

甚至更简单,虽然有点粗鲁:

$tmp = array(22 => false, 18 => false, 35 => false, 34 => false);
foreach($linkSets as $link) {
    $parts = explode(',', $link);
    $tmp[$parts[1]] = $parts[0];
}    
$best = current(array_filter($tmp)); // Works if your strings are non-false
echo $best;

工作示例:

  

http://codepad.org/V6tHJAF7