0

我需要使用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嵌套数组?

4

2 回答 2

1

您需要转义变量名。根据create_function文档(强调我的):

通常这些参数将作为单引号分隔的字符串传递。使用单引号字符串的原因是为了保护变量名不被解析,否则,如果您使用双引号,则需要对变量名进行转义,例如\$avar.

我应该为未来的读者指出,Frits van Campen 的答案可能是您应该使用的解决方案,但如果您绝对需要使用create_function,我的答案应该有效。

于 2012-05-14T20:58:32.553 回答
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
于 2012-05-14T20:56:52.230 回答