-
- if (count($array) != count(array_unique($array))) {
- echo '配列に重複した値があります'
- }
- ?>
コードをコピー
PHPは重複した配列データを削除します
-
-
$input = array("a" => "緑","", "赤","b" => "緑", "" ,"blue", "red","c" => "witer","hello","witer");
- //$result = array_unique($input); //重複した要素を削除します
- $result = a_array_unique ($input); //要素を 1 つだけ残す
- foreach($result as $aa)
- {
- echo $aa."
"; - }
- function multi_unique($array) {
- foreach ( $array as $k=>$na)
- $new[$k] = Serialize($na);
- $uniq = array_unique($new);
- foreach($uniq as $k=>$ser)
- $new1[$k] = unserialize($ser);
- return ($new1);
- }
function a_array_unique($array)//より良く書かれています
- {
- $out = array( );
- foreach ($array as $key=>$value) {
- if (!in_array($value, $out))
- {
- $out[$key] = $value;
- }
- }
- return $ out;
- }
- ?>
-
-
コードをコピー
PHP 配列には重複項目を削除する組み込み関数 array_unique () がありますが、PHP の array_unique 関数は 1 次元配列にのみ適用されます多次元配列には適していません。
以下は、2 次元配列の array_unique 関数を実装します。
-
- function unique_arr($array2D,$stkeep=false,$ndformat=true)
- {
- // 第 1 レベルの配列キーを保持するかどうかを決定します (第 1 レベルの配列キーは数値以外である必要があります)
- if($stkeep) $stArr = array_keys($array2D);
- // セカンダリ配列キーを保持するかどうかを決定します (すべてのセカンダリ配列キーは同じである必要があります)
- if($ndformat) $ndArr = array_keys(end($array2D)) ;
- //次元削減。implode を使用して、1 次元配列をカンマで接続された文字列に変換することもできます
- foreach ($array2D as $v){
- $v = join(" ,",$v);
- $ temp[] = $v;
- }
- // 繰り返される文字列、つまり、繰り返される 1 次元配列を削除します
- $temp = array_unique($temp);
- // 逆アセンブルされた配列を再構築します
- foreach ($ temp as $k => $v)
- {
- if($stkeep) $k = $stArr[$k];
- if($ndformat)
- {
- $tempArr =explode(",", $v);
- foreach($tempArr as $ndkey => $ndval) $output[$k][$ndArr[$ndkey]] = $ndval;
- }
- else $output[$k] =explode(" ,",$ v);
- }
- return $output;
- }
- ?>
-
コードをコピー
テストケース:
-
- $array2D = array('first'=>array('title'=>'1111','date'=>'2222'),'first'=> ;array('title'=>'1111','date'=>'2222'),'third'=>array('title'=>'2222','date'=>'3333 '));
- print_r($array2D);
- print_r(unique_arr($array2D,true));
-
コードをコピー
2回 最後のページ
|