带有嵌套数组的PHP create_function

时间:2012-05-14 20:54:35

标签: php multidimensional-array create-function

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

2 个答案:

答案 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,我的答案应该有效。