質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

2回答

278閲覧

for文での複数の変数の扱いについて

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/01/03 13:00

編集2018/01/03 16:02

###前提・実現したいこと
for文の複数の変数と配列の処理についてです。
下記に試しコードを記載しましたので、ご教授願います。

###該当のソースコード

//最初の元のコードです for($num=0; $num<3000; $num++){ echo $変数名a[$num]; for($colornum=0;$colornum<20; $colornum++){ echo $変数名b[$colornum]; } }
//分解してみました for($num=0; $num<3000; $num++){ echo $変数名a[$num]; //本来ここにfor文の$colornumの部分があったが括弧の外に出した } for($colornum=0;$colornum<20; $colornum++){ echo $変数名b[$colornum]; }

このfor文の中の変数同士を一緒に使いたく、

for($num=0,$colornum=0; $num<3000,$colornum<20; $num++,$colornum++){ echo $変数名a[$num]; echo $変数名b[$colornum]; }

このように書いて試しましたが、希望の出力にはうまくならず、、、
$num が ループして、
$num=1 の時 この$num=1に入っている配列$colornum=1,$colornum=2,$colornum=3
を取得し、出力する方法はありませんでしょうか?

稚拙な文章で申し訳ないです。

###試したこと
1番目のものしか取得できませんでした。
$num=1 の時 この$num=1に入っている配列$colornum=1
という具合です。
この仕組みは理解できるのですが、、、
ご教授いただけましたら幸いです。

###補足情報
具体的な例では商品が3000個以内で、商品一つにつき、カラーバリエーションが20種類以内という具合です。 其のため商品no1に赤青黄などを付加して、配列のように no1 赤 no1 青 no1 黄  ・  ・  ・  続く この仕組みをfor文一つで、商品の変数とカラーバリエーションの変数を使用したいです。

もし、他の方法でも出力できるものがあれば教えていただけたらありがたいです。

###追加情報
最終的には、
二つの変数を使って他の配列(array等)を作成するというものです。
1番最初の試しコードでは綺麗に出力できますが、
変数がfor文の外で使えないです、、、
其のため、for文一つで完結したいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2018/01/03 15:35

「この$num=1に入っている配列$colornum=1,$colornum=2,$colornum=3」とはどういう意味ですか?なにがしたいのかを分かるように書いてください。
退会済みユーザー

退会済みユーザー

2018/01/03 16:00

具体的な例で申しますと、 商品が3000個以内で、商品一つにつき、カラーバリエーションが20種類以内という具合です。 其のため商品no1に赤青黄などを付加して、配列のように no1 赤 no1 青 no1 黄  ・  ・  ・  続く この仕組みをfor文一つで、商品の変数とカラーバリエーションの変数を使用したいです。 最初のコメントくださったte2jiさんのものを参考にして見ましたが なぜか変数の$変数名b[$colornum];というところは、表示されませんでした。 if文の中ではecho で変数$colornum自体はループとして動いているのは確認できました。
guest

回答2

0

二重ループの処理になるので、質問文の最初にあるような二重のforで書いてください。二重のループを1つのforで書くのは不可能です。

やりたいことが具体的に分かれば、forじゃなくて配列処理用の関数で処理可能かも知れませんが、それにしても結局二重ループの処理になります。

また、

変数がfor文の外で使えないです、、、

が意味不明です。具体的にどういう現象でしょうか?

投稿2018/01/03 16:28

編集2018/01/03 16:30
otn

総合スコア84499

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/01/03 18:25

説明がうまくできていなくて、時間をとらせてしまい申し訳無いです。 (最終的には、二つの変数を使って他の配列(array等)を作成するというのが最終点なので、もしこれができるのなら、二重ループでしたいのですが、) 制御構文での変数のスコープの話になるかと思うのですが、、、 (スコープの範囲以外では使えない点は理解済) for($num=0; $num<3000; $num++){ echo $変数名a[$num]; for($colornum=0;$colornum<20; $colornum++){ echo $変数名b[$colornum]; } } //for文の外と言った箇所 $new=array( array(“num" => $変数名a[$num],”color" => $変数名b[$colornum])); こういう形ではループの中の処理での変数は使えないのでしょうか。
otn

2018/01/03 22:23

> こういう形ではループの中の処理での変数は使えないのでしょうか。 使えます。ただ、ループ後なので、 > $new=array( array(“num" => $変数名a[$num],”color" => $変数名b[$colornum])); は、 $new=array( array(“num" => $変数名a[3000],”color" => $変数名b[20])); と同じですが。 やりたいことを具体的に書けば、具体的なアドバイスが得られるかも知れません。
退会済みユーザー

退会済みユーザー

2018/01/04 06:05

何度もご回答ありがとうございます。 include('XXXXXXXXXXX.php'); //json_decode変数等 を使うためのphpファイル for($num=0; $num<3000; $num++){ $gsxzaiko = $json_decode['aaa']['bbb'][$num]['ccc$在庫']['$t']; echo $gsxzaiko; for($colornum=0;$colornum<20; $colornum++){ echo '色:'; $checkcolor=$json_decode['products'][0]['variants'][$colornum]['option1_value']; echo '</br>'; } } $postattributes=array(“aaa" => array(“bbb" => array( array("option1_value" => $checkcolor,"stocks" => $gsxzaiko)))); $postrequest_options = array( 'http' => array( 'method' => 'PUT', 'header'=> "Authorization: Bearer XXXXXXXXXXXXX" . "Content-Type: application/json\r\n", 'content' => json_encode($postattributes) ) ); $postcontext = stream_context_create($postrequest_options); $posturl = 'bbb'; $postresponse_body = file_get_contents($posturl, false, $postcontext); 具体的に言いますとこのような上記の内容で 以下の内容をPUTで更新したいというものです。 no1 赤 no1 青 no1 黄  ・  ・  ・  続く 上記のこの書き方でいきますと   赤 200 青329 黄 40 ・・・続く を更新したいです、、、 最初からこちらのコードを掲げていれば、よかったかもしれないです。 申し訳ないです。
otn

2018/01/04 06:20 編集

データが不明で、いまいち分かりませんが、 $data = ""; for($num=0; $num<3000; $num++){ $no = $json_decode['aaa']['bbb'][$num]['ccc$在庫']['$t']; for($colornum=0;$colornum<20; $colornum++){ $data = $data . " " . $no . " " . $json_decode['products'][0]['variants'][$colornum]['option1_value']; } } みたいなことがしたいと言うことでしょうか?
退会済みユーザー

退会済みユーザー

2018/01/04 07:21 編集

掲載のデータにミスがありました。ご教授いただいているのに申し訳ないです。 include('XXXXXXXXXXX.php'); //json_decode変数等 を使うためのphpファイル //3000商品をループさせている for($num=0; $num<3000; $num++){ //違うファイルから引っ張ってきた在庫数を $gsxzaikoに入れた $gsxzaiko = $json_decode['aaa']['bbb'][$num]['ccc$在庫']['$t']; for($colornum=0;$colornum<20; $colornum++){ echo '色:'; //元あるデータの情報から色バリエーションの情報を引っ張ってきた $checkcolor=$json_decode['products'][0]['variants'][$colornum]['option1_value']; echo '</br>'; } } //修正前 //$postattributes=array(“aaa" => array(“bbb" => array( array("option1_value" => $checkcolor,"stocks" => $gsxzaiko)))); // 修正しました。申し訳ないです。 //更新する際にカラー=>在庫数として更新される //在庫のみの更新では無い //元ある情報に色をkey として更新。 //違うファイルから引っ張ってきて入れた変数$gsxzaikoを$postattributesのデータに入れた $postattributes=array("product" => array("variants" => array( array("option1_value" => $checkcolor,"stocks" => $gsxzaiko)))); 伝わらなかったらすいません、、、
otn

2018/01/04 13:00

伝わりません。 もう一度書くと、 ・二重ループにするしか無い ・ループ後に変数が使えないというのは単なる勘違い です。
退会済みユーザー

退会済みユーザー

2018/01/04 13:25

伝わらず、本当に申し訳ないです、、、 ・二重ループにするしか無い ・ループ後に変数が使えないというのは単なる勘違い ご指摘ありがとうございます。 この二点を踏まえて試行錯誤した後の質問なのですが、 $postattributes=array("product" => array("variants" => array( array("option1_value" => $checkcolor,"stocks" => $gsxzaiko)))); ---二重ループ始まり--- ---中のループ始まり--- この箇所に上記のコード ---中のループ終わり--- ---二重ループ終わり--- $checkcolorは全種類取れるのですが、 $gsxzaikoでは1回目のループと思われる数しか取れなく、赤40 青40 黄40 という具合になっています 赤40 青70 黄30 という具合には出力することはできないのでしょうか?
otn

2018/01/04 14:25

よく分かりませんが、. でくっつければ良いのでは?
退会済みユーザー

退会済みユーザー

2018/01/04 16:34 編集

ご回答ありがとうございます。 出力させるだけならば、それでいいのですが、出力したあとに、 他のデータベース等にPOST/PUTする際に $postattributes=array("product" => array("variants" => array( array("option1_value" => $checkcolor,"stocks" => $gsxzaiko)))); この形を用いたかったのです、、、 以前のコメントに $new=array( array(“num" => $変数名a[3000],”color" => $変数名b[20])); と同じですが。 とありますが、 この場合はループ内ですが 変数が二つありそれぞれが違うループのものなので、 1コードで、POST処理するのは不可能とういう事になるのでしょうか? これ以上質問するのも申し訳ないので、これを最終の質問とさせて いただきます。
guest

0

要件がぶれているように見えるので微妙ですが

php

1for($count=0; $count<3000; ++$count){ 2 echo $変数名a[$count]; 3 if($count<20){ 4 echo $変数名b[$count]; 5 } 6}

とかかな?

投稿2018/01/03 13:12

編集2018/01/03 13:14
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/01/03 13:24

ありがとうございます。te2jiさんの$countの部分が$colornumと$numと二つあるのです、、、もう少し考えて見ます。ご回答本当に嬉しくありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問