如何将一个额外的变量传递到一个cmp函数中,以便在php中使用usort
我需要使用基于一个来自使用php4的mysql调用的字符串的usort来排序一个数组。如何将一个额外的变量传递到一个cmp函数中,以便在php中使用usort
到目前为止,我有mysql的呼吁得到订单:
$result=mysql_query("SELECT rank from order WHERE id=1"); $row = mysql_fetch_row($result);
这给了我像$行[0] = '阿尔贝托,卡洛斯,Brocephus,埃德加,丹妮拉';
我具备的功能,它的工作,如果我硬编码在数组中:
function cmp($a,$b){ //$order = how do I get $row[0] in here?
$a_index = array_search($a['name'], $order);
if (!$a_index) {
$a_index = 999;
}
$b_index = array_search($b['name'], $order);
if (!$b_index) {
$b_index = 999;
}
return $a_index - $b_index;
}
usort($names,cmp);
什么让这串入CMP函数作为数组的最简单的方法?
回答:
如果你是一个现代版的PHP,你可以简单地使用use
关键字如下:
function cmp($a, $b) use $your_string { ...
}
或者使用闭包与use
这样一起:
usort(function($a, $b) use $your_string { ...
});
然而,由于您使用的是PHP的古老版本,因此您可能不得不诉诸于使用全局声明
function cmp($a, $b) { global $your_string;
...
}
回答:
您不能在PHP 4中使用闭包,但可以使用一个对象。使用
class ArrayComparer { var $indexedarray;
function ArrayComparer($str) {
$this->indexedarray = array_flip(explode(', ', $str));
}
function cmp($a, $b) {
$a = $a['name'];
$b = $b['name'];
$a_index = (isset($this->indexedarray[$a])) ? $this->indexedarray[$a] : 0x7fffffff;
$b_index = (isset($this->indexedarray[$b])) ? $this->indexedarray[$b] : 0x7fffffff;
return $a_index - $b_index;
}
function callback() {
return array($this, 'cmp');
}
}
例子:
$cmp = new ArrayComparer('Alberto, Carlos, Brocephus, Edgar, Daniela'); usort($names, $cmp->callback());
以上是 如何将一个额外的变量传递到一个cmp函数中,以便在php中使用usort 的全部内容, 来源链接: utcz.com/qa/258248.html