小弟初学 zephir 编写 php 扩展,一般的 hello world 已经会写了,现在想将一些常用的 php 函数翻译成 zephir 版本的,下面的这个函数翻译失败,请大神帮忙指点指点,谢谢。
原 php 函数
/**
* 二维数组排序,可以按照多个字段进行排序
* @param array $array
* @param array $sort_field_list
* @return mixed
*/
function sortArray($array, $sort_field_list) {
$sort_arr = [];
$sort_rule = '';
foreach ($sort_field_list as $sort_field => $sort_way) {
foreach ($array as $key => $val) {
$sort_arr[$sort_field][$key] = $val[$sort_field];
}
$sort_rule .= '$sort_arr["' . $sort_field . '"],' . $sort_way . ',';
}
if (empty($sort_arr) || empty($sort_rule)) {
return $array;
}
eval('array_multisort(' . $sort_rule . ' $array);');
return $array;
}
下面是小弟的翻译版:
namespace HelloWord;
class Greeting
{
public static function say(arr_list, sort_field_list)
{
var sort_arr = [];
var sort_rule = "";
for sort_field, sort_way in sort_field_list {
for key_s, val in arr_list {
let sort_arr[sort_field][key_s] = val[sort_field];
}
sort_rule .= 'sort_arr["' . sort_field . '"],' . sort_way . ',';
}
if (empty(sort_arr) || empty(sort_rule)) {
return arr_list;
}
eval('array_multisort(' . sort_rule . ' arr_list);');
return arr_list;
}
}
build 的时候报错如下:
root@:/webDefault/zeptest/helloword# zephir build
Zephir version has changed, use "zephir fullclean" to perform a full clean of the project
[ERROR] Cannot mutate variable 'sort_field' because it wasn't defined in
/webDefault/zeptest/helloword/helloword/greeting.zep on line 9
Zephir version has changed, use "zephir fullclean" to perform a full clean of the project
Preparing for PHP compilation...
Preparing configuration file...
Compiling...
Zephir version has changed, use "zephir fullclean" to perform a full clean of the project
Installing...
Extension installed.
Add "extension=helloword.so" to your php.ini
! [NOTE] Don't forget to restart your web server