• ベストアンサー

配列と繰り返し

PHPを勉強し始めて間もない者です。 例えばなのですが、 (A,B,C,D) (A,B,C,D) (A,B,C,D) という語群があって、この中から3つを選択して、 A,A,A A,A,B A,A,C A,A,D A,B,A A,B,B A,B,C …… という文字列を作りたいのですが、どのようにすれば良いのかわからなかったので質問させていただきました。 宜しくお願いします。

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

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

ループする構文の中でさらにループさせて、ソレをまたループさせるというネストする構造になっていれば良いのですが、とりあえず下記。 <?php $abcd = array('A', 'B', 'C', 'D'); foreach($abcd as $val1){ foreach($abcd as $val2){ foreach($abcd as $val3){ echo "$val1, $val2, $val3"."\r\n"; } } } ?>

cross1777
質問者

お礼

tostem41さん、hogehoge78さん、アドバイスありがとうございます。 おかげ様で解決することができました。

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

その他の回答 (1)

  • tostem41
  • ベストアンサー率38% (7/18)
回答No.2

言語は詳しくありませんが… 3つの配列ぐるぐる回して配列の要素を表示していけばいいんですよね? こんな感じで配列の要素数分だけfor文で回して、それを3配列分繰り返すと期待した結果が求められると思います。 for i = 0 to A[].COUNT for j = 0 to B[].COUNT for k = 0 to C[].COUNT print A[i]B[j]C[k] next next next ※配列の要素番号が0始まりなのか、for文の公式、配列の要素数の表示方法、配列の要素を表示させる方法、結果の表示方法についてはご自身で変更して下さい。

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

関連するQ&A

  • 多次元配列のキーをつないで文字列にする

    PHP5.4の配列で仮に次のようなものがあったとします。 <?php $arr['A']['B']['C']['D'] = null; $arr['A']['B']['D']['C'] = null; $arr['A']['B']['D'] = null; それぞれのキー名をつなぎあわせてそれぞれ「A, B, C, D」「A, B, D, C」「A, B, D」といった文字列に変換したいのですが、どのようにしたら実現できるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • エクセルで特定の文字だけ抽出する関数

    A列に、『a-b-c d』といった文字列があります。 a、b、c、dはそれぞれ英数字で、文字数が各行異なり、 aとb、bとcの間には必ず”-”で区切られ、dの前はスペースで区切られています。 またこの文字列は、以下の文字列の場合もあります。 『a-b d』(cの文字列が無い) 『a d』(b、cの文字列が無い) 『d』(a、b、cの文字列が無い) この条件の上で、aの文字列のみをB列、bの文字列のみをC列、cの文字列のみをD列に 表示するには、どういった関数の組み方をすれば良いのでしょうか。 LEFT、MID、RIGHT、FIND、、、そのあたりだと思うのですが、 ”-”(ハイフン)が複数存在する時の、()の中の組み方が分かりません。 分かる方がいましたらお願いします。

  • エクセル:配列数式やINDIRECT(CxRy,1)の挙動について

    modesut様がQNo.2487818でされている質問に答えられればと 頭を捻ったのですが (http://oshiete.coneco.net/kotaeru.php3?q=2487818) データはQNo.2487818のを流用させて頂くとして =INDIRECT("C10")とか =INDIRECT("c"&10)とかすると チャンと参照して6と応えるのに =INDIRECT(CONCATENATE("r",3,"c",10),1)とか (#REF!) =INDIRECT(TEXT(CONCATENATE("r",3,"c",10),"@"),1)とか (#REF!) =INDIRECT("c"&(MATCH(1,1*(D2=$A$2:$A$11)*(A2=$B$2:$B$11))))とか (#VALUE!) =INDIRECT("c"&MATCH(1,1*(D2=$A$2:$A$11)*(A2=$B$2:$B$11)))とか (#N/A!) =INDIRECT(CONCATENATE("R",3,"C",MATCH(1,1*(D2=$A$2:$A$11)*(A2=$B$2:$B$11))),1)とか (#N/A!) =INDIRECT("c"&TEXT(MATCH(1,1*(D2=$A$2:$A$11)*(A2=$B$2:$B$11)),"@"))とか (#N/A!) エラーに成ってしまいます 何故でしょうか? もう一つ 例えば上の例を流用して TRANSPOSE((D2=$A$2:$A$11)*(A2=$B$2:$B$11)*({0,1,2,3,4,5,6,7,8,9,10}))と ($D$2:$D$11)を結合して10行2列の配列を合成できたら データベース構文のCriteriaにも応用できそうだし 何よりVLOOKUPやHlookupのリストとして使えるので 便利そうだから出来ないのかな? と探したのですが見付けられませんでした 何か良い方法ありませんか? あと 文字列の1文字ずつを可変長の配列定数の要素の1つ々に分解するにはどうしたらいいでしょうか? (文字列は可変長な為) 例 text     → {t,e,x,t} ストリングス → {ス,ト,リ,ン,グ,ス} "stringth" → {s,t,r,i,n,g,t,h} 注)全てマクロ系は使わずにお願いします m(_ _)m

  • 配列から別の配列の要素を削除する方法

    ある配列array_aに、100件の文字列要素が格納されています。 別の配列array_bには、80件の文字列要素が格納されています。 array_aの要素、array_bの要素共に重複するものはありません。 array_b中に存在する要素はすべてarray_a中にも存在します。 array_aにあり、array_bにはない要素で構成されたarray_cの作り方を教えてください。 例えば $array_a=array("a","b","c","d","e","f","g"); $array_b=array("e","b","d"); なら、 $array_c=array("a","c","f","g") になります。 配列array_aとarray_bは、 $array_b=array("b","b","d"); であったり、 $array_a=array("a","a","b","c","d","e","f","g"); といった「重複する要素を含むパターン」はありません。要素はすべてユニークです。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • セレクトメニューに文字列をセットする方法

    JavaScriptを勉強し始めてまだ1ヵ月の初心者です。 どうしても分からず先に進めません。どうか、教えて下さい。 よろしくお願い致します。 下記の文字列を配列や連想配列などを使用して、二段構えのセレクトメニューを作成したいのです。 ちなみに、PHPでHIDDENを使用して文字列をセットしています。 A0,0001,あああ,A0,0002,いいい,B0,1111,かかか, B0,1112,ききき,B0,1113,くくく,C0,1500,さささ… このような文字列を使用し、「A0,0001,あああ」が1レコードのイメージです。 一つ目のセレクトメニューで、頭のA0,B0,C0…を選択し、さらに二つ目のセレクトメニューでは、 一つ目で選択したものによって選択されたものの後半部分がそれぞれメニューに表示されるようにしたいのです。 自分なりにいろんなサイトや書籍で調べてみたのですが、分かりませんでした。 質問の内容も分かり難いかと思いますが、どうぞ宜しくお願い致します。

  • エクセルの特殊な繰り返し

    初めて書き込みます。 エクセルで、同じセルの内容を繰り返し表示させたいのですが、ちょっと特殊なのです。 例えばA列に "a","b","c" と入力されていたら、 B列に "a","a","a","b","b","b","c","c","c" とA列の内容全てを3回繰り返して他の列に表示させたいのです。 何かいい方法はないでしょうか? よろしくお願いします。

  • 処理の繰り返しについて教えてください

    A列1行目の値をD列1行目にコピーし、E列でD列の文字列の右から3文字を返す。 そしてD列の下端までコピーの繰り返しD列の下端より1行下がりA列に戻る。 A列※行目の値をD列※行目にコピー・・・・。といった作業をD列の一番下のセル まで繰り返したいです。 さらにこの作業をブック内の左から数えて2個を除いた10個程度あるシートの すべてで反映させたいです。 下の感じで作ってみたのですが、繰り返し処理がイマイチよくわかりません。 ご指導のほどよろしくお願いします。 Cells(1, 1).Copy 'A列1行目の値をD列1行目にコピー(1) Cells(1, 4).PasteSpecial Paste:=xlValues ActiveCell.Offset(0, 1).Select 'E列でD列の文字列の右から3文字を返す(2) ActiveCell.FormulaR1C1 = "=right(RC[-1],3)" j = Cells(1, 4).End(xlDown).Row 'D列の下端を指定して For i = 1 To j Cells(1, 5).Copy 'D列の下端までコピーの繰り返し(3) Cells(i, 5).PasteSpecial Paste:=xlValues Next i ActiveCell.Offset(1, -4).Select 'D列の下端より1行下がりA列に戻る(4) Cells(※, 1).Copy 'A列※行目の値をD列※行目にコピー(6) Cells(※, 4).PasteSpecial Paste:=xlValues       A列          D列         E列 1  ****●▽■(1)    ****●▽■(2)      ●▽■(3) 2                  ****           ●▽■ 3    3                    *****      ●▽■ 4                 *****           ●▽■ 6   ****■▽■(5)    ****■▽■(6) 

  • 配列の計算(PHP)

    (1)[m1,14,5,3] (2)[m1,14,3,5] (3)[m2,28,1,30] (4)[m1,28,2,10]     ・     ・     続く     ・ このような配列を、[a,b,c,d]とします。 c*d/10を五捨五超入してから、bをかけて((1)なら1.5=1、1*14=14)、(1)~全てを足し合わせるという作業が基本で、【その中でも、aとbが同じもの同士(上記で言う(1)と(2))の場合だけは、それぞれのc*d/10を足しあわせてから五捨五超入してbをかける((1)と(2)なら1.5+1.5=3、3*14=42)】 この計算式をphpで作ろうと思っていますが、思いつきません。。。 わかる方おりましたら、ご教授よろしくおねがいします。

    • ベストアンサー
    • PHP
  • EXCEL 2つの決まった文字列の間を自動的に範囲選択

    下のような表があるとします。   A  B  C  D  E  F 1 いか 2 たこ ・  ・ ・ 8 たい 9 ひらめ この中からA行にある”たこ”(A2)という文字列を検索して、そこから”たい”(A8)という文字列のある右5行のF行まで(A2:F8)を自動的に範囲選択するような、決まった行にある決まった2つの文字列の間+決まった行までを範囲選択するマクロを作りたいのですが上手く行きません。 何卒、お知恵をお貸し下さい。

  • 配列の比較について・・・困ってます・・。

    ご質問させていただきます。 これは、fin2というファイルから数値を抜き出し配列に格納して、finの文字列と比較し、その文字列のある場所で配列の数値と比較し、合致したら、ある出力をするというものなんですが、 配列に格納した数値が、 a[1]=[123] b=[234] a[1]=[345] b=[400] というふうに増えていくときは問題ないですが、途中でたとえば a[n]=100 b[n]=400 a[n+1]=300 b[n+1]=358 という風にn+1番目のaより、n番目のbが大きいときに、止まってしまうんです、これをうまく処理して最後まで比較させたいんですが、どうしてもうまくいきません。どなたかたすけてください。やはり、 n==b[yabu]の処理の後になんか書けばいいんでしょうか?長々と申し訳ございませんでした。 if(fin2!=NULL) { int yabu=0; for(int i=0; fgets(c,CHARMAX,fin2)!=NULL;i++) { sscanf(c,"%d%*c%*c%d",&a[yabu],&b[yabu]); fprintf(fout2,"%d::::::::::::::%d:%d\n",yabu,a[yabu],b[yabu]); yabu++; } } int yabu=0; n=0; while(fgetc(fin)!=EOF) { n++; if(n==a[yabu]) { fprintf(fout2,"A "); } else if(n==b[yabu]) { fprintf(fout2,"B "); yabu++;} else {fprintf(fout2,"C "); } } printf("%d\n",yabu);

このQ&Aのポイント
  • インクを取り換えても1か月以上印刷できない理由と対策
  • EPSON PX-105の印刷トラブルを解決する方法
  • EPSON PX-105のインク交換後に印刷できない場合の対処法
回答を見る