• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【配列の保存&書き込み】)

【配列の保存&書き込み】

このQ&Aのポイント
  • 配列を使ってデータの保存と読み込みをする方法について質問させていただきます。
  • 既存のデータが存在するかどうかをチェックし、存在する場合はデータをすべて呼び出し、存在しない場合は配列に初期値0を代入します。
  • 質問者はsharedObjectと配列を使用して保存と書き込みを行う方法を教えてほしいと述べています。

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

  • ベストアンサー
回答No.1

単純な2次元の配列であれば、x,yのテキストデータのように扱うと良いかも知れません。 0,0,0 0,0,0 0,0,0 上記が初期化された時のkiroku配列(二次元配列)の状態でしょうか。 ソースで書くと下みたいな感じでしょうか。 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 var kiroku = new Array(); var savedata = SharedObject.getLocal("test"); function setSO(arr) { var s = arr.length; var __kiroku = new Array(); for(i=0;i<s;i++) { __kiroku[i] = arr[i].join(","); } savedata.data.kiroku = __kiroku.join("\n"); } if (savedata.data.kiroku != undefined) { _kiroku = savedata.data.kiroku.split("\n"); for(i=0;i<3;i++) { kiroku[i] = _kiroku[i].split(","); } } else { //初期化 for (i=0; i<3; i++) { kiroku[i] = new Array(); for (j=0; j<3; j++) { kiroku[i][j] = 0; } } } //ここらへんでデータを更新 setSO(kiroku);//データ保存 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 もっと複雑な構造体になってしまう場合はPHPにあるserializeのような形式にしてしまったり、JSONっぽいevalを使うような物にしてしまうと解り易いのではないかと思います。

dizzdive
質問者

お礼

回答していただき、ありがとうございます。 デバッグで値を代入されるのを確認できました。 問題はこのスクリプトを私が使いこなせるかどうか(汗

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

関連するQ&A

  • フォームを使った配列変数の受け渡し

    PHP初心者です、よろしくお願いします。 フォームからPHPで配列変数を受け渡すことを考えています。 一次元配列はうまく渡せましたので、これを二次元にしましたところ、 うまく渡せません。基本的なPHPの文法がわかってないので、つまづい ています。多分、配列変数の記述方法がおかしいのだと思うのですが・・。 ご教授よろしくお願いします。 <html> <body> <form method = "POST" action ="test2.php" > <?php //データ渡し側 for ($i = 0 ;$i < 2 ;$i ++){ for ($j=0 ;$j <2;$j ++ ){ echo ("<input type ='text' name = 'data[$i][$j]' size ='10'>\n"); echo ("<br>\n"); } echo ("</tr>\n"); } ?> <input type="submit" name ="sbmit" value="data_input" > </form> </body> </html> <?php //データ受け側 for ($i = 0 ;$i < 2 ;$i ++){ for ($j=0 ;$j < 2;$j ++ ){ $tmp_data[$i][$j] = $_POST["data"][$i][$j]; echo ("$tmp_data[$i][$j] <br>\n"); } } ?> <html> <body> <form method = "POST" action ="test2.php" > <?php for ($i = 0 ;$i < 2 ;$i ++){ for ($j=0 ;$j <2;$j ++ ){ echo ("<input type ='text' name = 'data[$i][$j]' size ='10' value='$tmp_data[$i][$j]'>\n"); echo ("<br>\n"); } } ?> </table> <input type="submit" name ="sbmit" value="in" > </form> </body> </html> 実行結果は、 Array[0] Array[1] Array[0] Array[1] と表示されて、実際の入力した値が反映されません。

    • ベストアンサー
    • PHP
  • 一つの配列変数をいじると連動して他が代わってしまう理由が知りたいです

    以下の二つの命令 flagSave() と flagLoad() は、ローカル上に _root.flag の値をセーブ、ロードするプログラムです。 _root.flag は配列変数で、 _root.flag.A = "1" _root.flag.B ="全角文字" 等、様々な変数が入ります。 _root.flag の値は、色々変化した後、セーブをしないでロード(昔セーブしたデータに戻す)をする場合があります。 私はこれで動くと思ってプログラムしたのですが・・・ 一度でも flagSave() か flagLoad() を実行すると、 以後 _root.flag の値を変化させると(_root.flag.A="1" 等の命令実行)、それに連動して _root.savedata.data.flag の値も同じように変化するようになってしまいます。 私のやりたい事は、 セーブ&ロードをする時以外は、_root.flag の値だけを変化させ、_root.savedata.data.flag の値は変動させないようにしたいのです。 何方か、以下のプログラムの悪い点等がわかりましたら、是非とも御教授させてはいただけないでしょうか。 よろしくお願い致します。 ------------------------------------------ //================ // フラグのセーブ //================ function flagSave() { _root.savedata = SharedObject.getLocal("TEST"); _root.savedata.clear(); _root.savedata.data.flag = new Array; _root.savedata.data.flag = _root.flag; _root.savedata.flush(); } //================ // フラグのロード //================ function flagLoad() { _root.savedata = SharedObject.getLocal("TEST"); _root.flag = new Array; _root.flag = _root.savedata.data.flag; }

    • ベストアンサー
    • Flash
  • 配列

    最後にもう一つだけお願いします。ずっと格闘しても解決できません・・ 配列の中の数字で、偶数を全て奇数の前にもって行きます 例) {1,0,1,0,0,1,1} → {0,0,0,1,1,1,1} {3,3,2} → {2,3,3} {2,2,2} → {2,2,2} 流れとしては、まず奇数の数を数えます。これは何回シフトするから知るためです。 配列0から奇数を探し、あればそれを一番最後の配列へとシフトします。 奇数を探す作業が一度終わっても、まだシフトさせないといけない奇数があるかもしれないので(奇数が連続で並んでる場合)、最初に数えた奇数の数分だけちゃんとシフトするようにしようと思います。 public void evensLeft(int[] array) { int odd=0; for (int i = 0; i < array.length; i++) { if(array[i]%2!=0) odd++; //奇数の個数 } while (odd>0) { //奇数分シフトするためのカウント for(int j=0;j<array.length;j++){ //奇数を探す if (array[j] % 2 != 0) { odd--; //奇数のカウントを1減らす for (int k = j; k < array.length-1; k++) { //その奇数を一番最後に移動 int temp = array[k+1]; array[k+1] = array[k]; array[k] = temp; } } } } return array; } いくつかの例では動くのですが、{3,3,2}の例だと配列0に3が来てしまいます。色々変えてみても結果無理でした・・・ どなたかご教授お願いします。

    • ベストアンサー
    • Java
  • 配列の中に複数存在する数がいくつあるか

    お世話になります。配列の中に同じ数が存在する数がいくつあるかを調べたいのですが、途中でつまづいてしまいました。 例えば配列arrayの中に、0, 0, 5, 0, 5, 1, 5といった数が格納されているとしたら 複数ある数は0と5の2つなので、2を返す、というだけのプログラムです。 int n=array.length; int cnt=0; for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ if(array[i]==array[j]){ cnt++; break; } } } return cnt; forループで配列0から同じ数を順番に調べ、もしヒットすればカウントを増やして内側のループをブレイクし、配列1からまた順番に調べようとしたのですが、 上の例の場合、配列0と配列1が同じ数(0)ですので、カウントが余計に増えてしまいます。 どのように組めばうまく動作するでしょうか。宜しくお願いします。

    • ベストアンサー
    • Java
  • 配列の受け渡し

    こんばんは。 あるページで使用した配列を他のページでも使いたいのですが、 こういう配列を格納した変数の受け渡しって出来るのでしょうか? 普通の変数のデータを受け渡したかったら <input type="hidden" />で直接valueに変数の値を入れれば良いですが、 配列だと自分では以下のように愚直にやる方法しか分かりません。 もっとちゃんと渡せる方法ってあるのでしょうか? <?$a=array(1,2,3,4,5);?> <? for($i=0;$i<count($aaa);$i++){ ?> <input type="hidden" value="<?=$aaa[$i]?>" name="hoge[]"/> <?}?>

    • ベストアンサー
    • PHP
  • 配列長参照のオーバーヘッド

    for等ループでループ終了条件に配列長を使用する場合、配列長を毎回参照する場合と一旦変数に格納して参照する場合、定数を使用する場合と処理速度の差はありますか? つまり 1、for( int i = 0; i < array.length; i++ ) { ... } 2、for( int i = 0; i < len; i++ ) { ... } *(int len=array.length) 3、for( int i = 0; i < 10; i++ ) { ... } *(int[] array = new int[10]) forループ内の処理のメモリ使用量の多寡は不明で、毎ループで読み取られる全ての変数はコンピュータのキャッシュに残るかどうかは不明だとします。

    • ベストアンサー
    • Java
  • 配列の中に重複文字列があるか否かをチェックしたいのですが、アルゴリズムを教えてください。

    配列10000個の中に次のように文字列が入っているとします。 (実際に使うのはもっとずっと長い文字列が配列内に格納されています。) Data_Array[1] = "GRZRMZCOMKMSG" Data_Array[2] = "DCUIROTLUMWBC" Data_Array[3] = "RGLBMILRPBSMY" . . . Data_Array[9998] = "RSKFDHAHMOESI" Data_Array[9999] = "AQVOXBVNILGOP" Data_Array[10000] = "YNYRUPEXYOGFN" 配列Data_Array[10000]の中に重複文字列がないか探索したいと考えています。 ~普段の手順~ 配列中身を一度テキストに吐き出し、そのテキストをExcelに貼り付ける。 そして、Excelのフィルタ機能で重複文字列を排除。 その後、重複文字列を排除した文字列を保存したものをテキストファイルに保存する。 それをプログラムで読み込んで配列内に格納してから次の処理を続ける といった、効率の悪い方法をとっています。 そこで、プログラム内で処理する方法を次のように考えてみました。 ~思いつく方法~ dim DataArrayTemp[10000] for i = 1 to 10000 flag = 0 // 重複文字がないかチェック for j = i+1 to 10000 ifb Data_Array[i] = Data_Array[j] then // 重複があった場合はflag = 1にする flag = 1 break // 内ループ脱出 endif next // flag = 0であれば重複がない項目 (flag = 1のときは、重複がある) ifb flag = 0 then DataArrayTemp[temp_i] = Data_Array[i] temp_i = temp_i + 1 endif next これは、力技なので配列内の量が多くなると計算時間がかかってしまいます。 ですので、重複しない文字列だけを抽出する効率の良い方法がありましたらどなたか知恵を貸してください。

  • 配列に格納した値が保存されない

    DB(Access)から取得した内容を配列に格納し、その内容を取り出すプログラムを 以下のように書いてみました。 whileループ内の alert("ループの中=" + data_array[i]); では配列の中の値が参照できるのですが whileループの外で for(var i=0;i < data_array.length; i++){ alert("ループの外:" + data_array[i]); } 配列の中身を表示させようとしたところdata_array.length の長さが0になっており 配列の中身が参照できない状態です。なにが原因かわかりますでしょうか。 <html> <script language="javascript" type="text/javascript"> function dbSearch() { var sql="select * from URL where flg=0"; var database = dbConnect(); var recordSet = database.Execute(sql); var data_array = new Array(); while (!recordSet.EOF){ data_array[i] = recordSet(0); alert("ループの中=" + data_array[i]); recordSet.MoveNext(); } alert("長さ=" + data_array.length); for(var i=0;i < data_array.length; i++){ alert("ループの外:" + data_array[i]); } database.Close(); return; } //データベースに接続 function dbConnect() { var database = new ActiveXObject("ADODB.Connection"); database.Open("Driver={Microsoft Access Driver (*.mdb)}; DBQ=c:\\test.mdb;"); return database; } </script> <body> <input type="button" value="DB接続" onclick="dbSearch()"> </body> </html>

  • 2次元配列のポインタ

    整数型行2列2の2次元配列の[1][0]は、ポインタでは3になるとおもっているのですが、ちがったでしょうか? 下記のソースでエラーが出ていて困っています。 void main() { int array[2][2] = { { 9, 9 }, { 9, 9 } }; int num=2, j,i; *(array + 3) = 0; for (i = 0; i < num; i++) { for (j = 0; j < num; j++) { printf("%d", array[i][j]); } puts(""); } } 99 09 と表示させたいのですが、どこに間違いがあるのでしょうか?

  • 多次元配列とfor文について

    javascriptの配列について質問です。 例えば: var arrXXX = new Array(); function samplefunc{ //3次元配列の種類の作成 for (m = 0; m < aaa.length ; m++) { //連想配列作成 arrXXX .push(aaa[m]); } for (j = 0; j < bbb.length; j++) { for (i = 0; i < ccc.length; i++) { arrXXX[aaa[j]] = new Array(ccc.length); arrXXX[aaa[j]][i] = new Array(ccc.length); for (k = 0; k < ddd.length; k++) { arrXXX[aaa[j]][i][k] = eee;     ここでは配列を適切に使える・・・ } } } ここでarrXXXを使いたいが、3次元配列でなくなっている?!  arrXXX[~][0][0]はnullまたはオブジェクトではありません・・・がでます。 } 結局、for文を完全にでてしまうと、せっかくつくった配列がダメになってしまいます。どうすればfor文外で配列を使用できるのか教えてください!