作者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