我需要使用create_function
,因为运行应用程序的服务器有一个过时的PHP版本。
问题是我传入usort
的项目是数组,我需要按数组中的值排序:
$sort_dist = create_function( '$a, $b', "
if( $a['order-dir'] == 'asc' ) {
return $a['distance'] > $b['distance'];
}
else {
return $a['distance'] < $b['distance'];
}"
);
usort( $items, $sort_dist );
给出错误:syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
删除对['distance']
和['order-dir']
的引用会删除此错误。
有谁知道如何将create_function
与嵌套数组一起使用?
答案 0 :(得分:1)
在此实例中不要使用create_function
。您也可以这样写:
function sort_by_distance($a, $b) {
if( $a['order-dir'] == 'asc' ) {
return $a['distance'] > $b['distance'];
}
else {
return $a['distance'] < $b['distance'];
}
}
usort( $items, "sort_by_distance" ); // pass the function name as a string
答案 1 :(得分:1)
您需要转义变量名称。根据{{3}}文档(强调我的):
通常这些参数将作为单引号分隔的字符串传递。使用单引号字符串的原因是为了保护变量名不被解析,否则,如果使用双引号,则需要转义变量名,例如:
\$avar
我应该注意未来的读者create_function
可能是您应该使用的解决方案,但如果您绝对需要使用create_function
,我的答案应该有效。