检测触发数组中增量编号更改的记录

Detect a record that triggers a change in the incremental numbering in an array

我有一组记录,每一个都有一个编号

NAME    | NUMBER
Record1 | 1
Record2 | 2
Record3 | 3
Record4 | 4
Record5 | 5
Record6 | 6
Record8 | 7

table 可以更新,可能的版本如下所示

NAME     | NUMBER
Record1  | 1
Record2  | 2
Record4  | 3
Record5  | 4
Record6  | 5
Record7  | 6
Record10 | 7

每次在现有记录之前添加一条记录时,新记录之后的所有记录的编号都会发生变化。如果添加一条记录,则编号将增加 1,如果添加两条记录,则编号将增加 2,依此类推。此外,更新后 table 的行数可能比以前少。

当满足特定条件时,例如当其状态标志更改时,在 table 中添加和删除每一行。

我无法知道记录在特定 table 中添加之前的顺序,也无法知道何时添加,以便从一开始就分配一个唯一编号。

我正在比较更改前后的 table 以检测任何更改,返回的结果是所有具有新编号的行,但未返回触发更改的行。

$a = array_diff($tableBefore, $tableAfter);
$b = array_diff($tableAfter, $tableBefore);

$differences = array_merge(array_diff($a, $b), array_diff($b, $a));

我需要检测触发增量编号更改的单个记录或记录集。

如果不解决 foreach 循环并检查每条新旧记录是否存在 and/or 如果它有新号码,我如何才能实现这一目标?

将 table 数据加载到关联数组中,例如

$tableBefore = array(
    'Record1' => 1,
    'Record2' => 2,
    ...
    'Record8' => 7
);
$tableAfter = array(
    'Record1' => 1,
    'Record2' => 2,
    ...
    'Record10' => 7
);

然后使用

$differences = array_merge(array_diff_assoc($tableBefore, $tableAfter),
                           array_diff_assoc($tableAfter, $tableBefore));