作者knives ()
看板PHP
标题[请益] 怎麽更有效判断阵列是否没有重覆的值
时间Thu Dec 13 11:35:18 2012
我有一个二维阵列
像这样 array ( 0=>['no'=>1,'name'=>'name'],
1=>['no'=>2,'name'=>'name2'],
依此类堆
那我要怎麽知道 no 里面有没有重覆的值
在不执行foreach的情况下呢
我本来是想用array_unique 来检查回传的阵列数量是不是跟原本的数量一样大
但是这个问题是会连name也判断到,我只想确认no有没有重覆
请问没有在不执行回圈的情况下去检查有没有重覆
谢谢回答
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 111.82.97.139
1F:推 Jerr:必须把no取出, 即使你写的php code没有loop, runtime还是会去 12/13 11:53
2F:→ Jerr:loop的, 而且效率不一定比自己刻foreach好, 当然为了可读性可 12/13 11:54
3F:→ Jerr:以用array_map, array_filter来loop取出no来判断 12/13 11:55
4F:→ Jerr:array_unique(array_map(function($i) { return $i['no'];}, 12/13 11:58
5F:→ Jerr:$arr)); 12/13 11:59
6F:→ Jerr:像这样会loop两次 12/13 12:00
7F:→ Jerr:$pool = array(); 12/13 12:01
8F:→ Jerr:$checked = array_filter($array, function($i) use(&$pool){ 12/13 12:03
9F:→ Jerr: if(isset($pool[$i['no']])) return $i; 12/13 12:03
10F:→ Jerr: $pool[$i['no']] = true; 12/13 12:04
11F:→ Jerr: return NULL; 12/13 12:04
12F:→ Jerr:}); 12/13 12:04
13F:→ Jerr:如上只loop一次就取出重复, 但是跟foreach没啥两样了 12/13 12:06
14F:推 Jerr:如果只是要检查有没有重复, foreach里还可以continue; 反而 12/13 12:08
15F:→ Jerr:更快 12/13 12:08
16F:推 LaPass:php在这种时候还蛮麻烦的说.... orz 12/13 12:45
17F:→ knives:所以结论是没有现成的方法罗 12/13 15:05