質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

4586閲覧

phpで配列の重複がいくつあるのか調べたい。

hiroppii

総合スコア38

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/06/29 13:28

###前提・実現したいこと
データベースから、値を取ってきて foreach文を使ってデータの展開までは出来ているのですが、ある配列の一つに同じデータがあった場合、処理を切り替えたいと思っているのですが、array_uniqueは、どの段階で使えばいいのでしょうか?
宜しくお願い致します。

###発生している問題・エラーメッセージ

現在、foreach文内で、array_uniqueを使っているのですが、 Warning: array_unique() expects parameter 1 to be array, null given in 等と出てしまっています。 array_uniqueは、foreach文の外で使うものなんでしょうか? foreach文とarray_uniqueを使ったものが探しても見つからずにいます。

###該当のソースコード

php

1 2<table class="sample"> 3 <tbody> 4 <tr> 5 <th>てすと</th> 6 <th>てすと</th> 7 <th>てすと</th> 8 </tr> 9foreach ($tests as $test) { 10 <tr> 11 <td>てすと</td> 12 <td>$samplename</td> 13 この部分を$nameが重複していたら、radiobox に切り替えたいんです。 1415 <td><input type="checkbox" name="test" value="$name" checked="checked"></td> 16 </tr> 17} 18 </tbody> 19</table> 20 21array_unique($name); 22

###試したこと
array_unique をforeach文ないで使いました。

###補足情報(言語/FW/ツール等のバージョンなど)
php5.6

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KiyoshiMotoki

2016/06/30 07:59 編集

ご質問の内容を見直されてはいかがでしょうか?tanat様、BJCRobot様の回答にある通り、今回のケースでは array_unique を使用するのは適切ではないと思われますので。また、①「【何と】同じデータがあった場合、処理を切り替えたいと思っている」のかを明記 ②質問用に書き換えた(実行不可能な)コードではなく、可能な限り実際に書いているコードを載せる と、回答がつきやすくなると思います。
guest

回答2

0

ベストアンサー

$nameってどこから出てきたんですか?

array_uniqueの動きは確認しましたか?

PHP

1<?php 2 $array1 = array( 3 "foo" => "1", 4 "bar" => "2", 5 "boo" => "2", 6 ); 7 var_dump($array1); 8 9 $array2 = array_unique($array1); 10 var_dump($array2); 11?>

出力結果

array (size=3)
'foo' => string '1' (length=1)
'bar' => string '2' (length=1)
'boo' => string '2' (length=1)
array (size=2)
'foo' => string '1' (length=1)
'bar' => string '2' (length=1)

マニュアルによると

array を入力とし、値に重複のない新規配列を返します。

ということですが、希望の動作とあってますか?

何をしたいのかちょっと良くわかりませんが。これを見る限り
所望の処理はできないような気がしますが、もう一度確認してみてはいかがですか?

投稿2016/06/29 13:51

Mr_Roboto

総合スコア2208

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiroppii

2016/06/30 07:40

すみません。$nameではなく、$test['name']でした。 foreachを展開した時に、$test['name']が出て来ます。 やりたい事としては、このforeachの中のデータ$test['name']が重複だったら 処理を変えたいんです。 なので、重複と言う観点でarray_uniqueかな?と思ったのですが…。
Mr_Roboto

2016/06/30 07:46

重複というのは、連続して同じデータが入っているということですね? array_uniqueだと消えてしまうようですよ、それでいいのかな 処理を変えたいだけだったら前回の値が何だったか保持しておいて比較するだけでいいのでは?
hiroppii

2016/06/30 16:26 編集

>重複というのは、連続して同じデータが入っているということですね? そうです。連続して同じデータが入っています。 BJCRobot様のご指摘を受けたうえで、もう一度処理を見直した結果、前回の値が何だったか保持しておいて比較して、処理を変える事でやりたい事が実現しました。 有難う御座いました。
guest

0

PHPマニュアル array_unique()
array_uninque()の機能は

array を入力とし、値に重複のない新規配列を返します。

だけなので、主に重複を排除した配列を取得するために使うものであって、
foreachの中で重複チェックに使えたりするものではありません。

投稿2016/06/29 13:33

tanat

総合スコア18709

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiroppii

2016/06/30 16:26

回答有難う御座います。 array_uninque()について、よくわかっていなかったのでご指摘頂き、勉強になりました。 有難う御座いました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問