gpt4 book ai didi

php - array_unique 与 array_flip

转载 作者:IT王子 更新时间:2023-10-29 01:16:35 25 4
gpt4 key购买 nike

如果我有一个有符号整数数组,例如:

Array
(
[0] => -3
[1] => 1
[2] => 2
[3] => 3
[4] => 3
)

为了获得唯一值,我会本能地使用 array_unique 但经过考虑我可以执行两次 array_flip 会产生相同的效果,我认为它会更快?

array_unique O(n log n) 因为它使用的排序操作

array_flip O(n)

我的假设是否正确?

更新/示例:

$intArray1 = array(-4,1,2,3);
print_r($intArray1);
$intArray1 = array_flip($intArray1);
print_r($intArray1);
$intArray1 = array_flip($intArray1);
print_r($intArray1);

Array
(
[0] => -3
[1] => 1
[2] => 2
[3] => 3
[4] => 3
)
Array
(
[-3] => 0
[1] => 1
[2] => 2
[3] => 4
)
Array
(
[0] => -3
[1] => 1
[2] => 2
[4] => 3
)

最佳答案

我为你做了基准测试:CodePad

您对此的直觉是正确的!

$test=array();
for($run=0; $run<1000; $run++)
$test[]=rand(0,100);

$time=microtime(true);

for($run=0; $run<100; $run++)
$out=array_unique($test);

$time=microtime(true)-$time;
echo 'Array Unique: '.$time."\n";

$time=microtime(true);

for($run=0; $run<100; $run++)
$out=array_keys(array_flip($test));

$time=microtime(true)-$time;
echo 'Keys Flip: '.$time."\n";

$time=microtime(true);

for($run=0; $run<100; $run++)
$out=array_flip(array_flip($test));

$time=microtime(true)-$time;
echo 'Flip Flip: '.$time."\n";

输出:

Array Unique: 1.1829199790955
Keys Flip: 0.0084578990936279
Flip Flip: 0.0083951950073242

请注意 array_keys(array_flip($array)) 将按顺序给出新的键值,在许多情况下这可能是您想要的(除了比 array_values(array_unique ($array))),而 array_flip(array_flip($array))array_unique($array) 相同(除了快得多),其中键保持不变。

关于php - array_unique 与 array_flip,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8321620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com