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

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

ただいまの
回答率

91.23%

  • PHP

    15706questions

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

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

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 134
退会済みユーザー

退会済みユーザー

前提・実現したいこと

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文一つで完結したいです。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • otn

    2018/01/04 00:35

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

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2018/01/04 01:00

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

    キャンセル

回答 2

+3

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

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

また、

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/04 03: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]));


    こういう形ではループの中の処理での変数は使えないのでしょうか。

    キャンセル

  • 2018/01/04 07:23

    > こういう形ではループの中の処理での変数は使えないのでしょうか。
    使えます。ただ、ループ後なので、
    > $new=array( array(“num" => $変数名a[$num],”color" => $変数名b[$colornum]));
    は、
    $new=array( array(“num" => $変数名a[3000],”color" => $変数名b[20]));
    と同じですが。

    やりたいことを具体的に書けば、具体的なアドバイスが得られるかも知れません。

    キャンセル

  • 2018/01/04 15: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 ・・・続く
    を更新したいです、、、

    最初からこちらのコードを掲げていれば、よかったかもしれないです。
    申し訳ないです。

    キャンセル

  • 2018/01/04 15: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 16: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))));

    伝わらなかったらすいません、、、

    キャンセル

  • 2018/01/04 22:00

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

    キャンセル

  • 2018/01/04 22:25

    伝わらず、本当に申し訳ないです、、、

    ・二重ループにするしか無い
    ・ループ後に変数が使えないというのは単なる勘違い

    ご指摘ありがとうございます。
    この二点を踏まえて試行錯誤した後の質問なのですが、

    $postattributes=array("product" => array("variants" => array( array("option1_value" => $checkcolor,"stocks" => $gsxzaiko))));



    ---二重ループ始まり---

    ---中のループ始まり---


    この箇所に上記のコード

    ---中のループ終わり---

    ---二重ループ終わり---


    $checkcolorは全種類取れるのですが、 $gsxzaikoでは1回目のループと思われる数しか取れなく、赤40 青40 黄40 という具合になっています
    赤40 青70 黄30 という具合には出力することはできないのでしょうか?

    キャンセル

  • 2018/01/04 23:25

    よく分かりませんが、. でくっつければ良いのでは?

    キャンセル

  • 2018/01/05 01: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処理するのは不可能とういう事になるのでしょうか?

    これ以上質問するのも申し訳ないので、これを最終の質問とさせて
    いただきます。

    キャンセル

+1

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

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


とかかな?

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/03 22:24

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

    キャンセル

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

ただいまの回答率

91.23%

関連した質問

同じタグがついた質問を見る

  • PHP

    15706questions

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