phpの重複チェック
phpで配列の重複データをチェックして、重複しているデータを表示しようとしています。
foreach ($arry as $key => $value) {
$err_count = 0;
foreach ($arry as $key => $value2) {
if ($value == $value2) {
$err_count++;
if ($err_count >= 2) {
echo "重複".$value2;
}
}
}
}
としているのですが、
同じモノが2回表示されて困っています。
重複しているデータは一回だけ表示したいのですが、
なにか方法ないでしょうか?
No.1ベストアンサー
- 回答日時:
>if ($value == $value2) {
この$valueと$value2の中身が文字列の場合「==」を使うのは駄目だよ。
>foreach ($arry as $key => $value) {
>foreach ($arry as $key => $value2) {
$keyを上書きする理由は?
普通なら
foreach ($arry as $key1 => $value) {
foreach ($arry as $key2 => $value2) {
としようよ
そもそも添字をを拾ってきているんだからそれを有効活用しないと。
「===」もしくはstrcmp()関数を使おうね。
それと
>if ($value == $value2) {
> $err_count++;
> if ($err_count >= 2) {
> echo "重複".$value2;
> }
>}
なんて変な書き方する?
ものすごく効率悪いと思わない?
if($value === $value2 && $key1!==$key2){
これ一つですむのでは?
それと何故「2」だけが全角?
この回答への補足
valueとkeyには別の名前が入っていたので、
こちらにのせるため変更したときに、混同してしまいました。
すみません。
例えば、(a,b,c,a)とデータがあった時に、
ひとつめのループが最初のaを、ふたつめのループがイコールで、
ヒットしたものをメッセージで出力します。
そして、ひとつめのループ最後のaに入った時、もう一度、
メッセージが表示されてしまうのですが。
No.6
- 回答日時:
よく考えればユニークして差分をとるだけですね
<?
$arry=Array("a","b","a","c","b","a");
$arry2=array_unique(array_diff_assoc($arry,array_unique($arry)));
foreach($arry2 as $val) echo "重複".$val;
?>
No.5
- 回答日時:
修正したら下記のようになります。
foreach (array_unique($arry) as $value) {
$err_count = 0;
foreach ($arry as $value2) {
if ($value == $value2) {
$err_count++;
}
}
if ($err_count >= 2) {
echo "重複".$value.PHP_EOL;
}
}
書き直すと下記のようになります。
foreach (array_count_values($arry) as $key => $value) {
if ($value >= 2) {
echo "重複".$key.PHP_EOL;
}
}
No.4
- 回答日時:
重複データが3つ以上ある場合をどうするのでしょうか?
考え方としては、都度走査するか、チェッカーを使うのが妥当かと
<?
$arry=Array("a","b","c","a","b","a");
while(count($arry)){
$value=array_shift($arry);
if(array_search($value,$arry)) echo "重複".$value;
}
?>
<?
$arry=Array("x","y","z","x","z","x");
$check=Array();
foreach($arry as $value){
if(isset($check[$value])) echo "重複".$value;
else $check[$value]=true;
}
?>
No.2
- 回答日時:
>ひとつめのループが最初のaを、ふたつめのループがイコールで、
>ヒットしたものをメッセージで出力します。
>そして、ひとつめのループ最後のaに入った時、もう一度、
>メッセージが表示されてしまうのですが。
アルゴリズムのヒント。
ゲームなんかの総当たりの対戦表や九九(全部ではなくて半分だけで行う方法)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
- PHP ランキングを表示する際の画像の大きさを固定することは可能でしょうか? <?php if ( has_ 1 2022/07/21 14:55
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP PHP MySql ページング 2 2022/09/20 06:38
- Visual Basic(VBA) VBA 重複チェック後に値をワークシートに転記する方法を教えてください。 1 2023/03/19 12:43
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) フォーム上のリストボックスに重複して表示しています 3 2022/10/19 11:55
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHP で画面の一部だけを変えたい。
-
phpでのセレクトボックスの値を...
-
php セレクトボックス 値取得
-
phpでのselect値の取得・表記に...
-
プルダウンリスト(コンボボッ...
-
PHP ボタンが押されたら処理を...
-
フォーム送信後の更新ボタンで...
-
laravelを利用してコントロール...
-
1つのphpファイルで、入力フォ...
-
チェックボックスを使った複数...
-
テキストリンクをPOST送信したい
-
セッションを使わずに遷移先画...
-
CGI Perlでの認証について
-
複数行のデータ一括更新に関して
-
GETとPOST以外のデータの渡し方...
-
ボタンをクリックでPHP文を実行
-
phpで変数を使ってcopyできない
-
HTMLで前の画面に戻る時、入力...
-
検索時の選択内容を保持する方法
-
フォームに入力された値を計算...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プルダウンとCSVの連動
-
現在時刻を反映させた時刻のプ...
-
「"」(ダブルクォーテーション)...
-
選択したタグ、入力した検索文...
-
複数 selectフォームから今回on...
-
2つのプルダウンメニュから受け...
-
複数のセレクトボックスで
-
連動させたいセレクトボックス...
-
GET又はPOSTで受け取るデータに...
-
データベースにある値でリスト...
-
コンボボックス(プルダウン)...
-
php セレクトボックス 値取得
-
<select>文、foreachと初期値設定
-
PHP で画面の一部だけを変えたい。
-
セレクトフォームで選択した複...
-
phpでのセレクトボックスの値を...
-
ループでチェックボックスにche...
-
Smartyで、セレクトボックスが...
-
奇数や偶数を調べる関数
-
プログラミング言語で、使える...
おすすめ情報