ホームページ >バックエンド開発 >PHPチュートリアル >2000 データの配列。重複する値を持つインデックスを検索します。
2000 データの配列の場合、重複する値を含むインデックスを見つけます。
たとえば、配列には 1,2,2,2,3,4,5,5,5,6,2,2,7,8 が含まれます。 ,2, 5,3,9,......
2 の重複インデックスを取得 2,3,10,11,14
5 の重複インデックスは 7, 8,15
....
コストが高すぎるため、二重の for または while ループは使用できません。
--解決策- --- ----------------
$arr = 配列(1,2,2,2,3,4,5,5,5,6,2,2,7,8,2,5,3,9); $tmp = 配列(); foreach($arr AS $k => $v) { if(isset($tmp[$v])) { if($tmp[$v]) { $tmp[$v] .= ","; } $tmp[$v] .= $k; } それ以外 { $tmp[$v] = ""; } } foreach($tmp AS $k => $v) { if($v) { echo $k, "=>", $v, "n"; } } 設定を解除($tmp); <br><font color="#e78608">------解決策------------------</font><br>
$a = 配列(1,2,2,2,3,4,5,5,5,6,2,2,7,8,2,5,3,9); $r = 配列(); foreach($a として $v) { if(isset($r[$v])) 続行; if($t = array_keys(array_intersect($a, array($v)))) { unset($t[0]); $r[$v] = join(',', $t); } } $r = array_diff($r, array('')); print_r($r); <br><font color="#e78608">------解決策---------</font><br>
$arr = 配列(1,2,2,2,3,4,5,5,5,6,2,2,7,8,2,5,3,9); $str = implode(',', $arr); foreach ($arr as $k=>$v) { $t[$v] .= !isset($t[$v]) '' : $k .'; $l += strlen($v); if((strrpos($str, $v.'')) == $l-strlen($v)) $t[$v] = トリム($t[$v], ','); ++$l; } print_r($t); <div class="clear"></div>