0

我正在使用jQuery DataTables Row Reordering 插件对页面上的测验列表进行重新排序。处理AJAX 响应并将更改持久保存到数据库(在我的例子中是 MySQL)的最佳方法是什么?

目前,我只是从数据库中提取测验列表,将它们传递给执行重新排序的函数,然后循环遍历结果以将测验保存回数据库。这是我的重新排序函数,带有示例测试用例和输出:

<?php
 /**
 * Reorders a list of quizzes.
 * Assumes that the input list of quizzes is in sorted
 * order and looks like this:
 *
 *  $quizzes = array(array('id'=>27, 'sort_order'=>1), ...);quiz_id:{$quiz['id']} from: $from to: $to dir: $dir\n";
        if($counter === $to) {
            $next = $quiz;
        } else if(count($quizzes) === $from) {
            array_pop($quizzes); // discard
            continue;
        } else {
            $next = array_pop($quizzes);
        }

        $next['sort_changed'] = ($next['sort_order'] !== $counter);
        $next['sort_diff'] = $counter - $next['sort_order'];
        $next['sort_order'] = $counter;

        $reordered[] = $next;
        $counter--;
    }

    return array_reverse($reordered);
}
?>

例子:

<?php
$quizzes = array(
    array('id' => 1, 'sort_order' => 1),
    array('id' => 2, 'sort_order' => 2),
    array('id' => 3, 'sort_order' => 3),
    array('id' => 4, 'sort_order' => 4),
    array('id' => 5, 'sort_order' => 5)
);
$from = 4;
$quiz = $quizzes[$from-1];
$to = 1;

$result = reorder($quizzes, count($quizzes), $quiz, $from, $to, 'back');
print json_encode($result);
?>

输出如下:

[{"id":4,"sort_order":1,"sort_changed":true,"sort_diff":-3},
{"id":1,"sort_order":2,"sort_changed":true,"sort_diff":1},
{"id":2,"sort_order":3,"sort_changed":true,"sort_diff":1},
{"id":3,"sort_order":4,"sort_changed":true,"sort_diff":1},
{"id":5,"sort_order":5,"sort_changed":false,"sort_diff":0}]

这是我想太多了吗?有没有更简单的解决方案?

4

0 回答 0