如何将一个额外的变量传递到一个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

回到顶部