我不喜欢迭代调用 in_array() 的想法,因为它会对大数组造成一点拖累。
现在,我要遵循的方法可能不会创造任何速度记录(我没有费心进行基准测试),但我想我会发布一些非正统的方法,以防它们可能会激励未来的读者。
方法#1:
- 将多维数组转换为json字符串
- 在所有非数字子字符串上拆分字符串(这也会修剪值)
- 使用
array_flip() 消除重复项
- 使用
array_keys() 重新索引结果数组(输出值为整数类型)
方法#2:
- 将多维数组转换为json字符串
- 提取单词(在这种情况下包括数字,无需担心任何字母)
- 使用
array_flip() 消除重复项
- 使用
array_keys() 重新索引结果数组(输出值为整数类型)
代码:(Demo)
$array = [['8227', '8138'], [' 8227', ' 8138', ' 7785']];
echo "regex method: ";
var_export(
array_keys(
array_flip(
preg_split(
'/\D+/',
json_encode($array),
0,
PREG_SPLIT_NO_EMPTY
)
)
)
);
echo "\n\nnon-regex method: ";
var_export(
array_keys(
array_flip(
str_word_count(
json_encode($array),
1,
'0..9'
)
)
)
);
输出:
regex method: array (
0 => 8227,
1 => 8138,
2 => 7785,
)
non-regex method: array (
0 => 8227,
1 => 8138,
2 => 7785,
)
如果这两种方法中的任何一种表现良好,那是因为它们没有进行迭代函数调用。
附言好吧,因为我很好奇,我只是对我的两种方法和 DaveRandom 的方法做了一个非常小的/非官方的速度测试(使用 OP 的数据只有 1000 次迭代 - 我不想滥用 3v4l.org)和...
- 方法 #1 的运行速度与方法 #2 差不多
- 方法 #1 和方法 #2 的运行速度都比 DaveRandom 的方法快。
我再次声明,针对微优化的捏造测试可能毫无意义,如果实际数据确实很重要,则应该对您的真实数据进行真实测试。如果您只是更喜欢此页面上另一个答案的逻辑流程,我完全尊重这一点。