array_flip vs array_unique

看到同事使用两次array_flip来做array_unique的事,好奇之下查了一下资料

Alt text

Alt text

大致的意思是array_flip比array_unique的效率要高(简直是吊打),但是前者并不是后者的替代品——前者仅限于整形和字符型这样可以被转换成int的类型。其实这两种类型基本能覆盖我们大部分的使用场景了。

然后笔者就在笔记本(OS X EI Capitan, i5 2.7GHz, 8G DDR3)上测试了一下:

  • 数组长度为10
1
2
3
Array Unique: 0.00063300132751465
Keys Flip: 0.00059294700622559
Flip Flip: 0.00012087821960449
  • 100
1
2
3
Array Unique: 0.010995149612427
Keys Flip: 0.0025668144226074
Flip Flip: 0.0011510848999023
  • 1000
1
2
3
Array Unique: 0.15971708297729
Keys Flip: 0.0050117969512939
Flip Flip: 0.0038530826568604
  • 10k
1
2
3
Array Unique: 2.3442339897156
Keys Flip: 0.03787899017334
Flip Flip: 0.045354127883911
  • 100k
1
2
3
Array Unique: 41.93314409256
Keys Flip: 0.40603184700012
Flip Flip: 0.41118502616882

资料,array_flip的时间复杂度是O(n),而array_unique的是O(nlogn)

参考

坚持原创技术分享,您的支持将鼓励我继续创作!