记一次 array_unique,array_intersect,array_diff 的深刻理解

业务中调用第三方的接口通过 json 来更新数据,但是程序后台运行时总是触发业务报警,接口返回了错误代码。通过排查更新值,原先没有索引的数组格式经过业务逻辑之后变成了带有不连贯索引的对象。

业务中先获取旧的数据,与当前的A数据对比,去除已经需不要的数据,再与数据B进行合并,再去重之后json_encode直接编码进行更新,因为在主控程序中已经进行过类似的业务逻辑,测试通过并没有问题,所以在后台程序中直接进行了移植,并没有进行过多的测试。

主控与后台的逻辑中的区别在于给定的数据不同,同样都是更新数据,主控输入的数据是经过过滤一次的,再进行一次只是为了保险起见,而后台程序中的数据都是第一次进行处理。

因为数据都是不带键的数组,所以在进行处理的时候没有进行索引的考虑,没有显示声明键的数组单元会根据规则自动生成键,几个数组的函数都是不会键进行重新排序的,json_encode进行转换的时候,如果没有非连贯的数组下标就会被当成对象处理。解决的办法就是通过array_values对数组的值提取,进行索引重建,再进行json编码,就会取得一个json格式的数组。

其实解决问题很简单,主要的还是如何产生的问题。对于逻辑的理解不清,对于自己代码的信任,对于数据的信任,对于语言的理解。这些还是要加强的地方。

tag(s): none
show comments · back · home