スレッド表示 | フラット表示〕 全トピック 920 件中 84 番目 次≫ ≪前

配列についてお聞きしたいことがあります!!

created: 2007-10-25 18:04 | modified: 2007-10-28 15:23 | reply: 6

[3937] 配列についてお聞きしたいことがあります!!

user: コージ | created: 2007-10-25 18:04
フォームで入力されたキーワード(半角スペースでくぎっていくつかの単語入力可能)を

if(isset($_POST[button])){
$word = $_POST[words];
   $array = array();  //配列に指定
   $array = split(" ",$word); //半角スペースごとに単語分割
   $datacount = count($array); //配列のデータ数(単語数)を調べる。
//きちんと単語数を表示してくれます
   echo $datacount;
//ここがArrayと表示されてしまう・・・・・・・・・① 
   echo $array;

また・・・・・

for ($recnum = 0; $recnum < $var_array; $recnum++){
$keyword = $array[$recnum];
//全てのワードがとれてしまう。・・・・・・・・・・・・②
   echo $keyword;

この原因がわかりません。
教えてください。
reply: 3938 3941 返信 編集 削除

[3938] 配列について

user: ゆうじ | created: 2007-10-26 01:14
こんばんわ。

(1)echo は文字を出力するので、
   文字列型でない物を出力しようとすると型キャストが行われ
   配列の場合 "Array" が出力されます。
   http://jp.php.net/manual/ja/language.types.string.php#language.types.string.casting
   配列の中身を確認するなら、var_dumpを使います。
   http://jp.php.net/manual/ja/function.var-dump.php


(2) 「全てのワードがとれてしまう」ってどういう現象でしょう。
   ループの中で$keywordを連続して出力してるので
   $keywordと$keywordがくっついてるだけではないでしょうか。
Parent: 3937  返信 編集 削除

[3941] ソース長くてすいません。。

user: コージ | created: 2007-10-26 16:16
フォームで入力されたキーワード(半角スペースでくぎっていくつかの単語入力可能)が
①DBに登録してあったらcountsフィールどの数に1を足し格納。
②登録されていなかったら

「渋谷 池袋 新宿」とフォーム入力されたら「渋谷」「池袋」「新宿」と分割し、1単語ずつDBに登録されているか確認する。

if(isset($_POST[button])){
$word = $_POST[words];
   $array = array();  //配列に指定
   $array = split(" ",$word); //半角スペースごとに単語分割
   $datacount = count($array); //配列のデータ数(単語数)を調べる。
//きちんと単語数を表示してくれます
   echo $datacount;
  
//ここがArrayと表示されてしまう・・・・・・・・・① 
   echo $array;
*****************************
//フォーム2語以上入力された場合、1単語ずつ検索する

for ($recnum = 0; $recnum < $var_array; $recnum++){
$keyword = $array[$recnum];
$sql0 = "SELECT Count(*) AS reccnt FROM database WHERE words = '".$keyword."'";
$rst1 = mysql_query($sql0);
$col1 = mysql_fetch_array($rst1);
$reccnt = $col1[reccnt]; //キーワード件数

*****************************
//もしキーワードが登録されていたら
if ($reccnt > 0) {
$sql2 = "SELECT id,counts FROM database WHERE words = '%".$keyword."%'"; $res = mysql_query($sql2);
$row = mysql_fetch_array($res);
$id = $row[id];
$counts = $row[counts];
$counts = $counts + 1;
$sql1 = "UPDATE database SET counts = '".$counts."' WHERE id = '".$id."' ";//データ更新
}
//********************************************************************************
//もしキーワードが登録されていなかったら
else{
//この$wordを変更
$sql1 = "INSERT INTO database(key, counts) VALUES ( '".$keyword."',1)"; // データを追加する
}
}
そしてこの後表示をさせたいのです。
配列に代入して、単語を1つずつ検索したい場合にはどうしたらよいのでしょうか!?
教えていただきたいです。
Parent: 3937  reply: 3942 返信 編集 削除

[3942] 追加と変更です。

user: コージ | created: 2007-10-26 16:20
1つ目は・・・
②登録されていない場合にはkeyフィールドに格納

2つ目は・・・
$sql0 = "SELECT Count(*) AS reccnt FROM database WHERE keyword = '".$keyword."'";

3つ目は・・・
$sql2 = "SELECT id,counts FROM database WHERE keyword = '%".$keyword."%'"; $res = mysql_query($sql2);

すいません!
Parent: 3941  reply: 3945 返信 編集 削除

[3945] 色々試してみてるのですが・・

user: コージ | created: 2007-10-28 01:19
本当にできないんです・・。
この配列処理ができないと開発が進まなくて・・。
心優しい方教えてください。申し訳ございません。
よろしくお願い申し上げます。
Parent: 3942  reply: 3947 返信 編集 削除

[3947] 何はともあれvar_dump

user: ach | created: 2007-10-28 06:40
phpのdebugはいろいろ考えるよりvar_dump(var_export)して値の中身を確かめる方が早いです
//echo $array;
var_dump($array);

として見て下さい。

それと、その用途の場合はもっと別の手法が有効かと思います。
配列が得られているとして、
//探索用一時テーブルの作成(注:queryかセッション終了時に破棄される。方言気味)
//counts, wordsの定義はdatabaseのwordsと同じにする(ここでは仮にintegerとVARCHAR(20)とした)
$querys = "CREATE TEMPORARY TABLE tmp_words(counts INTEGER default 1, word VARCHAR(20) UNIQUE);";

//キーワードをサニタイズしてtmp_wordsにすべて突っ込む(注:MySQLの方言)
//databaseのwordsはuniqueと仮定
$query .= 'INSERT INTO tmp_words(word) VALUES ("'.implode('"),("', array_unique(array_map('mysql_real_escape_string', $array))).'");';

//wordsが一致したものだけcountsをインクリメント。tmp_wordsにもコピー
//一致しなかったものはcountsが1のはずなのでそれをdatabaseに追加
//結果を取得
$query .= <<<QUERY
UPDATE database, tmp_words SET tmp_words.counts = database.count + 1, database.counts = database.count + 1 WHERE database.words = tmp_words.words;
INSERT INTO database(counts, words) SELECT counts, words FROM tmp_words where counts = 1;
SELECT * FROM tmp_words;
QUERY;
//もしかすると一行ずつ投げる必要があるかも
$result = mysql_query($query);
idがprimary keyで自動インクリメントするとかwordsがuniqueだとかの仮定の上で動くものですが、SQLが得意なことはSQLに任せる方がいいと思います。
(でも移植しにくくなるかなぁ?プロの人はまた違う主張があるかも。)

>3つ目は・・・
>$sql2 = "SELECT id,counts FROM database WHERE keyword = '%".$keyword."%'"; $res = mysql_query($sql2);
パターン検索をしたいなら
keyword LIKE '%".$keyword."%'"

これに対応するにはconcatを使えばできるかもしれないけど……
間違いなく動作がおかしくなるし、重くなるしやめたほうがいいかも
Parent: 3945  reply: 3949 返信 編集 削除

[3949] 配列解決しました!

user: コージ | created: 2007-10-28 15:23
たくさんのアドバイスありがとうございます!
助かりました!
また何かありましたらよろしくお願いします!!
Parent: 3947  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 84 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑