毫不意外,有一些必要的更改,但我似乎无法解决与弃用的“create_function”函数相关的问题。我使用它来允许我通过一个或多个键名动态地对关联数组进行排序...例如:
usort($myarray, create_function('$a,$b', get_usort_function('field2 ASC, field5 ASC')));
现在,我已经阅读到应该使用匿名函数,所以将代码更改为以下内容...
usort($myarray, function($a,$b) { get_usort_function('field2 ASC, field5 ASC'); } );
get_usort_function用于创建比较所需的文本 - 因此对于上面的示例,它将返回类似于...
$field2=compare_ints($a['field2'], $b['field2']); if($field2==0){return compare_ints($a['field5'], $b['field5']);}else{return $field2;}
现在,在PHP8版本中匿名函数没有起作用 - 但如果我硬编码get_usort_function返回的字符串,它就会起作用。我错过了什么吗?
以下是此操作的简化示例...
<?php
function compare_ints($val1, $val2)
{
return $val1 <=> $val2;
}
function dynamic_create_usort_function()
{
$str='return compare_ints($a[' . "'" . 'id' . "'" . '], $b[' . "'" . 'id' . "'" . ']);';
return $str;
}
$a1 = array( 'id' => 9, 'name' => 'Andy');
$a2 = array( 'id' => 5, 'name' => 'Bob');
$a = array($a1, $a2);
$s = dynamic_create_usort_function();
print "\n\n***$s***\n\n";
print_r($a);
usort($a, function($a,$b) { dynamic_create_usort_function(); } );
print_r($a);
usort($a, function($a,$b) { return compare_ints($a['id'], $b['id']); } );
print_r($a);
?>
上述示例给出了...的输出。
***return compare_ints($a['id'], $b['id']);***
Array
(
[0] => Array
(
[id] => 9
[name] => Andy
)
[1] => Array
(
[id] => 5
[name] => Bob
)
)
Array
(
[0] => Array
(
[id] => 9
[name] => Andy
)
[1] => Array
(
[id] => 5
[name] => Bob
)
)
Array
(
[0] => Array
(
[id] => 5
[name] => Bob
)
[1] => Array
(
[id] => 9
[name] => Andy
)
)
我很希望解决这个问题,因为我的网站大量使用了usort函数!所以,显然需要最小的重新工作量是梦想...
提前感谢您, 达伦
eval()
。 - Barmar