• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:mysqlの置換について2)

MySQLの値を重複なく分割置換する方法

このQ&Aのポイント
  • MySQLのクエリで値を重複なく分割置換する方法を教えてください。
  • foreach文を使用して、値を分割して置換する方法を試していますが、重複が発生してしまいます。
  • 重複を排除し、「あああ いいい ううう えええ おおお」という形式で値を置換したいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

こんな感じ? <?PHP $array=array( "あああ いいい ううう えええ" ,"いいい あああ おおお" ,"ううう おおお" ); $temp=array(); foreach($array as $val){ $temp=array_merge($temp,explode(" ",$val)); } $temp=array_unique($temp); $str=implode(" ",$temp); print $str; ?> foreachのところはsqlからの戻りに読み替えてみてください

chapital2005
質問者

お礼

yambejp様 yes!そうです。まさに求めていた回答です。ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • hymat
  • ベストアンサー率58% (95/162)
回答No.2
chapital2005
質問者

お礼

hymat様 回答ありがとうございます。array_uniqueの関数の使い方で迷っていましたので、yambejp様をベストアンサーに選ばせていただきました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • mysqlの置換について

    Mysqlのクエリで値「aaa bbbbb cc dddd」を分割置換したい ・「aaa」 ・「bbbbb」 ・「cc」 ・「dddd」 $query = "SELECT * FROM log WHERE"; $sample = $db->rowset_assoc($query); if($sample){ echo "<ul>\n"; foreach($sample as $test){ echo "<li><a href=\"\">{$test['data']}</a></li>\n"; } echo "</ul>\n"; } これだとそのまんまだし・・・。ご存知の方、よろしくお願いします。

  • PHP/mySQLでインサートができません。

    PHPとmySQLを勉強中の初心者ですが、よろしくお願いします。 PHPで簡単なインサート文を作ってそれをmySQLに保存しようとしているのですが、以下のエラーが出てしまいます。 Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource プログラムは以下の通りです。HOSTNAME,USERNAME,DBPWDは別のところで定義していますが、mysql_connect, mysql_select_dbではエラーにならないので、データベースの選択まではうまく行っていると思うのですが。 $conn = mysql_connect(HOSTNAME, USERNAME, DBPWD); if(!$conn){ die("Logon Failure to mysql Server."); } $db = mysql_select_db(DBNAME, $conn); if(!$db){ die("Cannot access to the DB"); } foreach($csv_ary as $a => $b) { $query = "INSERT INTO TEST field_a VALUES $a"; if (!mysql_query($query, $db)){ echo "更新失敗: SQL=$query<br>"; } } mysql_close($conn); field_aはvarchar(10)でPrimary_key, NOT NULLの設定です。 Foreachで展開した配列の値はちゃんと長さ10の文字列が入っています。 PHP 4.3.11は mySQL 4.0.27です。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • CSVファイルからタイトル別一覧表示

    CSVファイルからタイトル別一覧表示 PHP初心者です。質問させてください。 以下のようなCSVファイルを読み込み、2列目の値をタイトルに一覧を作りたいのですが ループの中でどのように表記すればよいのでしょうか? 0,アイテム1,りんご 0,アイテム2,さば 1,アイテム1,グレープ 0,アイテム1,バナナ 0,アイテム2,いか <?php $array = file("shopdata.csv"); foreach($array as $line){ $line = explode("," , $line); if($line[0] == "0"){ echo '$line[1]'; echo '<ul>'; echo '<li>'.$line[2].'</li>'; } } ?> </ul> 以下のように表示したいのですが、上記では「$line[1]」もループしてしまい一覧になってしまいます。 アイテム1 <ul> <li>りんご</li> <li>バナナ</li> </ul> アイテム2 <ul> <li>さば</li> <li>いか</li> </ul> このように表示するにはどういった記述をすればいいのでしょうか? ご教示いただけますでしょうか。

    • 締切済み
    • PHP
  • 繰り返し処理が上手くいかない

    foreach($ARR_SCATTER as $val){ //人数分繰り返す //値を分解 $EXPLODE_VALUE = explode(",", $val); //質問1の値を配列に $QUESTION_NO[1][] = $EXPLODE_NUM[0]; //質問2の値を配列に $QUESTION_NO[2][] = $EXPLODE_NUM[1]; //質問3の値を配列に $QUESTION_NO[3][] = $EXPLODE_NUM[2]; //質問4の値を配列に $QUESTION_NO[4][] = $EXPLODE_NUM[3]; //質問5の値を配列に $QUESTION_NO[5][] = $EXPLODE_NUM[4]; //最後の質問の値を配列に $LAST_QUESTION[] = $EXPLODE_NUM[5]; $TOTAL[1] = $QUESTION_NO[1] + $LAST_QUESTION; $TOTAL[2] = $QUESTION_NO[2] + $LAST_QUESTION; $TOTAL[3] = $QUESTION_NO[3] + $LAST_QUESTION; $TOTAL[4] = $QUESTION_NO[4] + $LAST_QUESTION; $TOTAL[5] = $QUESTION_NO[5] + $LAST_QUESTION; } という処理を繰り返し処理をつかって記述したいのですが、うまくいきません。 下記のように記述しましたが、なぜか配列に値が1つしかはいりません。 (質問数は変動、言語はPHP5) foreach($ARR_SCATTER as $val){ //人数分繰り返す //値を分解 $EXPLODE_NUM = explode(",", $val); } for($test =0; $test <= $for_arr_count; $test++){ //質問の値を配列に $QUESTION_NO[$test][] .= $EXPLODE_RADIO_NUM[$test]; //最後の質問の値を配列に $LAST_QUESTION[] = $EXPLODE_RADIO_NUM[5]; $TOTAL[] = $QUESTION_NO[$test] + $LAST_QUESTION; $test++; } 原因がわからず困っています。 アドバイスお願いいたします。

    • ベストアンサー
    • PHP
  • php+MYSQL

    打ち込んだ後 var_dunpにてqueryの中身を確認したところ falseになってしまっていて失敗してしまいますどうしたらいいでしょうか? $query = 'SELECT * FROM test'; $res = mysql_query($query,$link); ここがおかしいのかと思ってます <?php $link = mysql_connect('localhost','user','pass','dbname'); if ( $link !==false) { $msg =''; $err_msg =''; if ( isset( $_POST['send'] )=== true) { $subject =$_POST['subject']; $honbun =$_POST['honbun']; if ( $subject !=='' && $honbun !=='' ) { $query = " INSERT INTO ogawa ( " ."subject," ."honbun," .") VALUES ( " . "'" . mysqli_real_escape_string( $link, $subject ) ."', " . "'" . mysqli_real_escape_string( $link, $honbun ) . "'" ." ) "; $kakikomi = date('Y-m-d h:i:s'); $res = mysqli_query($link,$query); if ($res !==false) { $msg = '書き込みに成功しました。'; }else{ $err_msg = '書き込みに失敗しました。'; } }else{ $err_msg = 'タイトルと本文を書き込んで下さい。'; } } $query = 'SELECT * FROM test'; $res = mysql_query($query,$link); $data = array(); var_dump($res); if ($res) { while($row = mysql_fetch_assoc($res)) { array_push($data,$row); } } arsort($data); }else{ echo"データベースの接続に失敗しました"; } mysql_close($link); ?> <html> <head> <meta http-equiv="content-type" content="text/html;charset=UTF8;" /> </head> <body>> <table border="1"> <form action="test6.php" method="POST"><input type="hidden" id="auth_token" name="auth_token" value="04d8fdd9da7e7b2cba8698a7cffda5b427b29b5b"><input type="hidden" id="auth_token" name="auth_token" value="04d8fdd9da7e7b2cba8698a7cffda5b427b29b5b"> <tr><th>タイトル<td><input type="text" name="text" size="50"></td></tr> <tr><th>本文<td><textarea name="subject" cols="52" rows="8">

  • PHP5 XML クエリ 

    PHP5でXMLのテストをしているのですが、わからないことがあります。 --- test.xml <A> <B> <C>TEST</C> <D> <E>1</E> <F>2</F> <G>3</G> </D> </B> </A> <?php $doc = new DOMDocument; $doc->preserveWhiteSpace = false; $doc->Load('test.xml'); $xpath = new DOMXPath($doc); $query = '//A/B/D/E'; $entries = $xpath->query($query); foreach ($entries as $entry) { echo "$entry->nodeValue\n"; } で1が返されますが、 $query = '//A/B/D/E'; で、Eのノードを決め打ちしているので、foreachで回すのが気に入らないのですが この方法が一般的でしょうか? $e = なんとか??; で$entries = $xpath->query($query); のあと、取得できないでしょうか? あと、クエリという使い方で例えば2以上データを取得する この場合はF,Gの要素を取得するクエリの記述方法が知りたいです。

    • ベストアンサー
    • PHP
  • phpで重複チェック

    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回表示されて困っています。 重複しているデータは一回だけ表示したいのですが、 なにか方法ないでしょうか?

    • ベストアンサー
    • PHP
  • キーワード検索

    ,で区切られた複数のキーワードがあり、そのキーワードが全て入っている文字列のみを抽出したいと思っています。 キーワードの数は固定ではありません。 ,で区切られたキーワードを分解して配列にし、 絞り込んでいきたいのですが、どうしたらいいのかわかりません。 $keyword = explode("," , $sample); foreach($data as $val){ list($id,$nakami) = explode("," , $val); for($i=0; $i < count($keyword); $i++){ if(ereg($keyword[$i] , $nakami)){ echo "$test"; } } } としても一つのキーワードが入っていれば表示される状態です。

    • ベストアンサー
    • PHP
  • MySQLのテーブルのコラム名の取得方法

    MySQLのテーブルを一つのオブジェクトと考えるようなクラスを作ろうとしています。 このクラスの中で、テーブルの各コラム(またはフィールド名)を要素にした配列を作りたいのですが、やり方がわかりません。 自分がある程度調べてみたところでは、MySQLシェルの中では、次のように入力すると添付した画面のようにコラム名の一覧が表示がされるのですが これらのコラム名をPHPスクリプト内にある配列に格納出来ません。 mysql> SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME="transaction"; まだ作成の途中ですが、自分のスクリプトは以下に掲載したようなものです // columnList initialize というブロックが該当部分です。ほかの部分はとりあえず働いてます。 どなたかお知恵を貸していただけないでしょうか。お願いいたします。 <?php class Table{ private $DBname; private $tableName; private $columnList=array(); private $dataArray=array(array()); private $totalRecords; //=================================================== public function __construct($database, $tablename) //=================================================== { $this->DBname=$database; $this->tableName=$tablename; $cxn=mysqli_connect("localhost","root","rsi2018","$database") or die("cannot connect to database"); // $columnList initialize $query="SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=\"$tablename\""; $result=mysqli_query($cxn, $query) or die("query failed :1"); $row=mysqli_fetch_array($result); foreach($row as $col){ $this->columnList[]=$col; } // $totalRecords initialize $query="select count(*) as count from $tablename"; $result=mysqli_query($cxn, $query) or die("query failed :3"); $row=mysqli_fetch_array($result); $this->totalRecords=$row["count"]; // $dataArray initialize for($i=0; $i < $this->totalRecords; $i++){ $query="select * from $tablename where id=($i+1)"; $result=mysqli_query($cxn, $query) or die("query failed :2"); $this->dataArray[$i]=mysqli_fetch_assoc($result); } }// end constructor //=================================================== public function showPart($id) //=================================================== { $data=$this->dataArray[$id - 1]; /* foreach($data as $key=>$value){ echo "$key = $value</br>"; } */ echo "ID: ".$data['id']."</br>"; echo "partNumber: ".$data['partNumber']."</br>"; echo "partName: ".$data['partName']."</br>"; echo "simpleName: ".$data['simpleName']."</br>"; echo "stock: ".$data['stock']."</br>"; echo "location: ".$data['location']."</br>"; }// end function //=================================================== public function getTotalRecords() //=================================================== { return $this->totalRecords; }// end function //=================================================== public function showColumnList() //=================================================== { foreach($this->columnList as $field){ echo "$field "; } echo "</br>"; }// end function }// end class ?>

    • ベストアンサー
    • PHP
  • 文字の置換がうまくいかない

    ********** test.txt ************* $first = "abc"; $last = "xyz"; ********************************* ********** change.txt *********** $first $firstaaa $last ********************************* という2つのテキストファイルがあったとして、 open(IN,"test.txt"); @data = IN; close IN; open(A,"change.txt"); while(<A>){$a_data .= $_} close A; foreach (@data) { if(/(\$[a-zA-Z_]+)[\t\s]*=[\t\s]*"(.+)"[\t\s]*;/){ my $name = $1; my $value = $2; print "$name<br>"; #$nameに何が入っているか表示 $a_data =~ s/$name/$value/g; } } としても、change.txtの$firstや$lastがabcや、xyzに置換されないのですが、なにがいけないのでしょうか?print "$name<br>";のところではちゃんと$firstと$lastという風に出力されています。$a_data =~ s/$name/$value/g;を$a_data =~ s/\$first/$value/g; と変えると、ちゃんと$firstだけ置換されました。 なにか心当たりがある方、よろしくお願いします。

    • ベストアンサー
    • Perl