【发布时间】:2019-10-11 10:14:10
【问题描述】:
我正在尝试创建一个简单的函数来使用 usort 对数组进行排序,但我不明白我的代码有什么问题。
对于测试,我想按“降”顺序按字段“str”排序。
我的测试数组:
$tabCustom = array(
0 => array(
'str' => 'cccc',
'nb' => 1
),
1 => array(
'str' => 'aaaa',
'nb' => 3
),
2 => array(
'str' => 'bbb',
'nb' => 2
)
);
这里是没有自定义功能的代码:
usort($tabCustom, function($a, $b)
{
$order = 'desc';
if($order == 'asc')
{
return strcasecmp($a['str'], $b['str']);
}
elseif($order == 'desc')
{
return strcasecmp($b['str'], $a['str']);
}
});
结果:
Array
(
[0] => Array
(
[str] => cccc
[nb] => 1
)
[1] => Array
(
[str] => bbb
[nb] => 2
)
[2] => Array
(
[str] => aaaa
[nb] => 3
)
)
现在我尝试基于相同的代码构建一个自定义函数:
function arraySort($array, $field, $order = 'asc')
{
usort($array, function($a, $b)
{
global $field;
global $order;
if($order == 'asc')
{
return strcasecmp($a[$field], $b[$field]);
}
elseif($order == 'desc')
{
return strcasecmp($b[$field], $a[$field]);
}
});
}
arraySort($tabCustom, 'str', 'desc');
错误的结果:
Array
(
[0] => Array
(
[str] => cccc
[nb] => 1
)
[1] => Array
(
[str] => bbb
[nb] => 2
)
[2] => Array
(
[str] => aaaa
[nb] => 3
)
)
所以我不明白出了什么问题,我已经为 $field 和 $order 放置了 global 变量,否则代码会说Undefined variable,但是我的表格排序不起作用。
你对这个问题有什么想法吗?
谢谢:)
【问题讨论】:
-
作为注释(而不是解决方案):永远不要使用 9/10 全局变量,而是传入参数
-
好的,谢谢,以后我会尽量不使用“global”