我需要使用基于使用php4的mysql调用的文本字符串的usort来命令一个数组。
到目前为止,我已经通过mysql调用来获取订单:
$result=mysql_query("SELECT rank from order WHERE id=1");
$row = mysql_fetch_row($result);
这给了我一些像$ row [0] ='Alberto,Carlos,Brocephus,Edgar,Daniela';
我有这个功能,如果我在数组中硬编码就可以了:
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函数的最简单方法是什么?
答案 0 :(得分:4)
您不能在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());
答案 1 :(得分:0)
如果您使用的是现代版本的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;
...
}