我在2D数组中有一些表格数据。我在某个列值上按等号对表格数据进行了分区。具有相等列值的表格数据的所有行被放置在新的2D阵列中,并且所有2D阵列都存储在3D阵列中。
现在我想按列的值对每个2D分区中的行进行排序,并按照相等的列值对3D数组中的2D分区进行排序。
我编写了以下函数来对分区数据进行排序:
function sortPartitions($tableCol, $partitionCol, $partitioned3dData) {
foreach($partitioned3dData as $table) {
usort($table,
function($a,$b) {
return genCmp($a[$tableCol],
$b[$tableCol]);
});
}
usort($partitioned3dData,
function($a,$b) {
return genCmp($a[0][$partitionCol],
$b[0][$partitionCol]);
});
return $partitioned3dData;
}
function genCmp($a,$b) {
if($a==$b)
return 0;
else
return ($a<$b) ? -1 : 1;
}
当我运行代码时出现以下错误:
Notice: Undefined variable: partitionCol in /path/to/file.php on line 1337.
为什么$tableCol
的值成功传递到匿名函数的闭包中,但$partitionCol
的值导致错误?
答案 0 :(得分:4)
您需要使用use
:
usort($partitioned3dData,
function($a,$b) use ($partitionCol) {
return genCmp($a[0][$partitionCol],
$b[0][$partitionCol]);
});
答案 1 :(得分:1)
对于两个匿名函数,您必须use
两个参数。如果我只使用$partitionCol
,我会收到 Undfinied变量错误。
function sortPartitions($tableCol, $partitionCol, $partitioned3dData) {
foreach($partitioned3dData as $table) {
usort($table, function($a,$b) use ($tableCol) {
return genCmp($a[$tableCol], $b[$tableCol]);
});
}
usort($partitioned3dData, function($a,$b) use ($partitionCol) {
return genCmp($a[0][$partitionCol], $b[0][$partitionCol]);
});
return $partitioned3dData;
}