精華區beta PHP 關於我們 聯絡資訊
我有一個二維陣列 像這樣 array ( 0=>['no'=>1,'name'=>'name'], 1=>['no'=>2,'name'=>'name2'], 依此類堆 那我要怎麼知道 no 裡面有沒有重覆的值 在不執行foreach的情況下呢 我本來是想用array_unique 來檢查回傳的陣列數量是不是跟原本的數量一樣大 但是這個問題是會連name也判斷到,我只想確認no有沒有重覆 請問沒有在不執行迴圈的情況下去檢查有沒有重覆 謝謝回答 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.82.97.139
Jerr:必須把no取出, 即使你寫的php code沒有loop, runtime還是會去 12/13 11:53
Jerr:loop的, 而且效率不一定比自己刻foreach好, 當然為了可讀性可 12/13 11:54
Jerr:以用array_map, array_filter來loop取出no來判斷 12/13 11:55
Jerr:array_unique(array_map(function($i) { return $i['no'];}, 12/13 11:58
Jerr:$arr)); 12/13 11:59
Jerr:像這樣會loop兩次 12/13 12:00
Jerr:$pool = array(); 12/13 12:01
Jerr:$checked = array_filter($array, function($i) use(&$pool){ 12/13 12:03
Jerr: if(isset($pool[$i['no']])) return $i; 12/13 12:03
Jerr: $pool[$i['no']] = true; 12/13 12:04
Jerr: return NULL; 12/13 12:04
Jerr:}); 12/13 12:04
Jerr:如上只loop一次就取出重複, 但是跟foreach沒啥兩樣了 12/13 12:06
Jerr:如果只是要檢查有沒有重複, foreach裡還可以continue; 反而 12/13 12:08
Jerr:更快 12/13 12:08
LaPass:php在這種時候還蠻麻煩的說.... orz 12/13 12:45
knives:所以結論是沒有現成的方法囉 12/13 15:05