• 締切済み

二次元配列のつかいかた。

配列の中に、同じ値があるかどうか、確認して、なければ データを渡すというようなプログラムを書きましたが、どうもうまくいきません.二次元配列が間違っているのだと思いますが、どこがいけないのでしょうか. my @databe=qw(aa:ee:rr:rr aa:rr:tt:aa dd:tt:dd:aa); my @nonumber=qw(ringo mikan tamago susi); my @check=();#not same contents my $p=0; my @array=(); foreach( @databe ){ my @f = split(/:/); my $i=0; foreach(@f){ push( @{$array[$p]}, $_); $i++; } $p++; } for(my $i=2;$i<$#nonumber;$i++){ for(my $p=0;$p<$#databe;$p++){ unless($array[0][$i] eq $array[$p][$i]){ push(@check, $i); } } } foreach( @databe ){ my @f = split(/:/); my %tmp; $tmp{GEBEN1}=$f[$check[0]];#html::template $tmp{GEBEN2}=$f[$check[1]];#html::template push( @alldata,\%tmp); } プログラム初心者です。自分なりに組んでみたのですがどうもうまくいきません. 分かる方御回答よろしくお願いします。

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「どうもうまくいきません」というのは相手に何も伝わらないので, 回答がほしいのであればこのように書いてはいけません. 「あなたがどのような結果を期待しているのか」がわからなければ「うまくいかない」のかどうかも判断できないよね. ついでにいうと, 「実際にどのような結果が得られたのか」も書いておくと, 回答者がわざわざ確かめなくていいので親切というもの. ところで, 最後の foreach ループは何がしたいの? 特に, $f[$check[0]] とか $f[$check[1]] とかで何をしている (つもりな) の?

kenpanch7
質問者

お礼

コメントありがとうございます。 次回から気をつけますね。 また、問題は、二次元配列の二つ目の[が{である必要がありました。 失礼しました。

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

関連するQ&A

  • 二次元配列に値をセットしたいんですが

    ASP(html)での変数をJavaScriptに渡して 二次元配列を作成したいのですが、どうもうまくいきません。 どなたか、ご教授願います。 サンプル 変数:strFact = "'工場1', 1000, 20/'工場2', 500, 90/'工場3', 2000, 100/'工場4', 900, 10" -------------------JavaScript strFact_WK = <%=strFact %>  ※1 var test = new Array(); var rows = strFact_WK.split("/"); for( var i in rows) { test.push(new Array()); var cols = rows[i].split(","); for( var j in cols) { test[i].push(cols[j]); } } ---------------------- 当然ですが、 ※1の所で strFact_wk = "'工場1', 1000, 20/'工場2', 500, 90/'工場3', 2000, 100/'工場4', 900, 10" とすると作成されます。

  • perlで配列を複数行削除したいのですが

    @UserDataNum=qw(11 13 34) @PDataLinesの中身 1<>タイトル<>2009/02/10<>適当なデータ<>適当なデータ2<> 2<>タイトル2<>2009/03/13<>適当なデータ<>適当なデータ2<> .. 50<>タイトル3<>2009/03/23<>適当なデータ<>適当なデータ2<> $TODAY=今日の時間; foreach(0..$#PDataLines){ my@aaa= split(/<>/,$PDataLines[$_]); my$a2 = $aaa[2];$a2 =~s{/}{}g; #ここの処理で@UserDataNumに入っている数字と一致する$aaa[0]を含む行を除外し、時間が今日以降のものを配列@Arrayに入れたいのです if(($aaa[0] !~ /@UserDataNum/) && ( $TODAY < $a2)){ push(@Array,$PDataLines[$_]); } } print "\@Array=@Array"; if(grep(!/@UserDataNum/, @PDataLines) && ( $TODAY2 < $a2)){ としてみたり試みているのですが、思うように出来ずにいます。 どなた様かご教授願えませんでしょうか 宜しくお願い致します。

    • ベストアンサー
    • Perl
  • foreachで多次元配列を生成

    こんにちわ。 配列をforeachでループさせて、それを多次元配列に入れていくことは可能でしょ うか? 例えば以下のようなデータがあるとします。 ---meibo.dat-------- c21<>田中<>21<>東京 c22<>佐藤<>22<>大阪 -------------------- ---test.php----------------------------------------------------- <? $list_meibo = file("meibo.dat"); foreach($list_meibo as $temp){    $i=split("<>",$temp);    $a=array($i[0] => array("name"=>$i[1],"age"=>$i[2],"ad"=>$i[3]),); } ?> ------------------------------------------------------------------- これでは $a=array("c21"=>array("name"=>"田中","age"=>"21","ad"=>"東京"), "c22"=>array("name"=>"佐藤",age"=>"21","ad"=>"大阪"),); という具合になってくれないでしょうか? これでいくと、配列の最後の要素のみデータに残ります。 どのようにしたらよいでしょうか? ご教授お願いします。

    • ベストアンサー
    • PHP
  • シェルの配列

    シェルで2つの配列の同じ位置の文字を同時にチェックしようとして以下のコードを組みましたが、上手くいきません。$dd中の文字が配列として扱われていないのはなぜだか教えていただけますか? #! /bin/csh -f set AA="18" set BB="20" set cc = "11 12 18 19" set dd = "24 22 20 21" @ idx = 1 foreach h_code ( $cc ) echo [$AA][$h_code][$BB][$dd[$idx]]     # ccの1個目とddの1個目をそれぞれ$AA,$BBと比較 if( $AA == $h_code && $BB == $dd[$idx] ) then echo "OK" endif @ idx++ end

  • 2次元配列をスマーティーにうけわたしたい。

    2次元配列を下記のようなソースで処理し、GETで取得したパラメーターと同じならば、スマーティーをつかって、検索フォームに値をわたしたい(次のページにいった時にフォームのチェックボタンなどをチェックしたいとかんがえています。(foreachはつかわないで)単体と複合の配列は、ラジオボタン、一戸建てと大規模のほうはチェックボックスにしたいと考えてます。 現在は、値が表示されない状態です。どうしたらよいでしょうか? //------------検索画面にひとつのパラメーターをわたす機能 $flagbreak=0; foreach($arr_parame as $row){ $i=1; foreach($row as $id => $list){ if( $id2 == $list['url'] ){ //$id2はGETで取得した値 $check_flag = $list['url']; $parame[$id][$check_flag] = '変数に渡す値を記入'; $flagbreak=1; break; } } if($flagbreak == 1)break; } $smarty -> assign("paramelist" , $parame); //smartyのしょり tplでは、{$paramelist.id.url}と書いてます。 ///////////////////////////////////////////////////////// 2次元配列 $arr_parame = array( array( array('no' => 1 , 'url' => 'un', 'title' => '単体'), array('no' => 2 , 'url' => 'com', 'title' => '複合')), array( array('no' => 1 , 'url' => 'ko', 'title' => '一戸建て'), array('no' => 2 , 'url' => 'man', 'title' => '大規模住宅'));

    • 締切済み
    • PHP
  • 区切り文字を配列に格納する方法を教えて下さい。

    区切り文字を配列に格納する方法を教えて下さい。 $array[] = "abc,1981,1,12"; $array[] = "def,1982,2,18"; $array[] = "ghi,1991,4,12"; list($name[$i],$yy[$i],$mm[$i],$dd[$i]) = split("\,",$array[$i]); でループさせればそれぞれの変数に代入できますが、例えば $name["abc"]["yy"] = "1981"; $name["abc"]["mm"] = "1"; $name["abc"]["dd"] = "12"; のように分解するにはどうすれば良いでしょうか?

    • 締切済み
    • PHP
  • 変数名を配列として利用するには?

    複数のモジュールに記述されている配列を1つの配列へ代入したいと思っています。 単純に考えれば、 @array = (@Module1::array, @Module2::array, @Module3::array); で良いのですが、モジュールが多岐に渡っており、モジュール名自体はスカラー変数へ代入して置き、それを利用したいと考えています。 @array = (); foreach $m (qw(Module1 Module2 Module3)) { $mn = $m. '::array'; foreach $w (@{$mn}) { # @Module1::array にアクセスしているつもり push(@array, $w); } } この様なイメージです。 しかし、@{$mn}は Can't use string ("変数名") as an ARRAY ref while "strict refs" in use at 行番号. になってしまいます。 スカラー文字列に入っている配列変数へアクセスするにはどう記述すれば良いでしょうか?

    • ベストアンサー
    • Perl
  • 配列から網羅的な文字列を生成するには?

    perlの配列を使った、網羅的な文字列生成について質問です。 ある特定の種類の文字のレパートリをつかった、n文字の文字列すべての組み合わせを生成したいと考えています。 例えば文字 A, B, C の三種類をつかった2文字の文字列なら AA,AB,AC,BA,BB,BC,CA,CB,CC 3x3 =9 種類というふうになります。 n=2の場合、 @array = qw(A B C); foreach $moji(@array){ $moji1 = $moji; foreach $moji(@array){ $moji2 = $moji; $mojiretu = $moji1.$moji2; push (@mojiretuset , $mojiretu ); }} print @mojiretuset; とするとforeachをふたつ重ねることで文字の組み合わせすべてを生成できました。 問題なのは、問題なのは、今私がしたいのは文字数nを(ループの)外から指定して(例えば$mojisuu = 6 などとして)n文字の場合の網羅的な文字の組み合わせを生じさせることなのです。 毎回自分でforeachを必要なだけ重ねて書き直す、というのは現実的ではありませんし、n個のforeachの入ったperlのコードを書くコードというのも避けたいのです。 文字数を自由に後から設定して、特定の配列から網羅的な組み合わせを生じさせるにはどのようなコードを書けばよいでしょうか?

    • ベストアンサー
    • Perl
  • javascriptの2次元配列をソートの仕方

    function word_grouping(data) { var code = data; //先頭についている”code="を除去 code = code.replace("code=",""); var = code.split(","); var alpha =new Array(); alpha = ['A','B','C','D','E','F','G','H','I','J','K','L','M']; //2次元配列作成 var array = new Array(); for (i =0; i < alpha.length; i++) { array[i] = [' ','0']: } //グループ名を格納 for( i = 0; i <alpha.length; i++){ array[i][0] = alpha[i] //0番目の項目から順番にグループごとに分ける for( i = 0; i < sp.length; i++){ group = sp[i].substring(0.1); //どのグループに所属しているか調べる for( j = 0; j < alpha.length; j++){ //一致したグループの配列にカウント+1していく if(group == array[j][0]{ array[j][1]++; } } } メモ ・spにはグループのどこかに所属する20個のキーワードが入っていてそれをグループに振り分けている ・グループ分けには”A001”のAだけみて振り分けています したいこと ・arrayに入ったキーワードの数を降順で並び替えたい 分からない所 ・2次元配列をsortする仕方 こんな感じなんです わかる方回答お願いします。

  • サブルーチンの結果

    my @data; my ($rows,$cols); sub Gettest { use Text::ParseWords; my $dfile = shift; # CSVファイル my @array = @_; @data = (); open(IN, $dfile) or exit(-1);# while(<IN>) { chomp; my @fields = quotewords("," => 0 , $_); # カンマデータの取込 foreach my $field (@fields){ if(index($field, ":") >= 0) { my @range = split(':',$field);# 範囲の取出し $field = sub { my $v = shift; return $range[0] <= $v && $v <= $range[1];}; } elsif(index($field, ",") >= 0) { my @list = split(',',$field); #種類の取出し $field = sub { my $v = shift; return grep($v == $_, @list); };}} push @data, [@fields];} close(IN); $rows = @data; $cols = @{$data[0]}; return squeezed(@array);#// 該当範囲の絞り込み} sub squeezed { my @para = @_; my @pos = (0 .. ($cols -1)); my $i; my @wk; for($i = 0; $i < $rows -1; $i++) { @wk = (); foreach my $p (@pos) {# 有効な位置 my $test = $data[$i]->[$p]; if("CODE" eq ref($test)){ # 範囲テストコードの場合 push @wk, $p if &$test($para[$i]); # test がOK } elsif($para[$i] eq /$test/) {push @wk, $p; # マッチ位置を配列に}} @pos = @wk;} if(@pos == 1){ return $data[-1]->[$pos[0]]; } else {return undef;#// 該当なしか2個以上ならundefを返却 }}1; 引数によってCSVデータの範囲を絞って結果を返すといった関数を、ご提供して頂いた のですが、「1:4」や「1,3,4」等の答えがCODE(XXX)になってしまいます。ご提供者様から、ループで変換するのではなく 最終行のみ変更を加えないようにするというアドバイスを頂いて色々ためしてみたのですが、 私のレベルではサブルーチンの理解が出来なくて全然うまくいきません。他力本願な お願いで申し訳ないのですが、解る方教えて下さい。

    • ベストアンサー
    • Perl