我会尽力解释这个。
我有一个名为$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
数组,我想不出任何方法可以做到这一点。
答案 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;
工作示例: