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

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

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

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

Q&A

解決済

2回答

1452閲覧

for文をネスト化する場合

SugiuraY

総合スコア317

PHP

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

0グッド

0クリップ

投稿2017/02/06 04:55

編集2017/02/06 06:52

お世話になります。
for文をネストで使用する場合、以下のコードのようにドットで連結して使用することはできないようですが、(条件式や処理の中の数字をループさせる)
なにか方法はございますでしょうか?

宜しくお願い申し上げます。

【追記】
具体的な目的を追記させて頂きます。
(1) 3つの配列があり、その要素の個数はそれぞれ可変となっております。下記の例では例えば3,4,5としておりますが、それらの個数をそれぞれ$num1,$num2,$num2に格納しております。

(2)要素の個数に併せて内側のfor文で目的とする値を取得させます。
$sampleNode = $dom->getElementsByTagName($array.$i4[$i3])->item(1);
$value.$i4[] =$sampleNode->nodeValue;

(3)(2)で取得した値を改めて$value1,$value2,value3の配列に入れてあげます。

(4)$array、$num、$valueの個数が示している通り、及び内容及びその要素の個数が異なる配列が3つあるが、処理したい内容は同じであるため。外側のfor文で3回ループさせています。またこれを実現するためにそれぞれの変数の末尾に1,2,3の連番を付しました。

PHP

1 2$array1=array("A","B","C"); 3$array2=array("D","E","F","G"); 4$array3=array("H","I","J","K","L"); 5 6$num1=3;//count($array1)の結果 7$num2=4;//count($array2)の結果 8$num3=5;//count($array3)の結果 9 10 for ($i4=0; $i4 <3 ; $i4++) { 11 12 for ($i3=0; $i3 <$num.$i4 ; $i3++) 13 { 14 $sampleNode = $dom->getElementsByTagName($array.$i4[$i3])->item(1); 15 $value.$i4[] =$sampleNode->nodeValue; 16 } 17} 18 19print_r($value1); 20/*2回目のループの$value1の配列になにも格納されていない 21例えばnodeValueの結果得られるのがa~lであるとして、それぞれの配列に格納してあげたい 22value1=array("a","b","c"); 23value2=array("d","e","f","g"); 24value3=array("h,"i","j","k","l"); 25*/

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

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

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

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

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

SugiuraY

2017/02/06 06:23

ご質問ありがとうございます。配列ではありません。intで配列をカウントした結果になります。
turbgraphics200

2017/02/06 06:32

具体的にどのようにループを回したいのか実際に値で示していただけないでしょうか
SugiuraY

2017/02/06 06:52

質問に追記をさせて頂きました。
guest

回答2

0

ベストアンサー

質問のようなことをしたいというのは、おそらく決定的に設計とかコードの組み方に間違いがあるのだと思います。
例えばここ$array.$i4[$i3]

仮に $array に "$arr"
$i4 と $i3 はループ変数なので、1 と 2 とします。
おそらくこう表現したいのですよね?

$arr1[2]

$arr という配列を名前別に定義していることが間違いです。
ここは $arr[1][2]
と二次元配列で持つべきです。


訂正された質問に対する修正案

検証していませんが、こんな感じで配列を構成すればいいんじゃないでしょうか?

PHP

1$array[] = array("A","B","C"); 2$array[] = array("D","E","F","G"); 3$array[] = array("H","I","J","K","L"); 4$value = array(); 5 6for ($i4 = 0; $i4 < count($array) ; $i4++) { 7 8 for ($i3=0; $i3 < count($array[$i4]); $i3++) 9 { 10 $sampleNode = $dom->getElementsByTagName($array[$i4][$i3])->item(1); 11 $value[$i4][] = $sampleNode->nodeValue; 12 } 13} 14 15print_r($value[0]); 16print_r($value[1]); 17print_r($value[2]); 18

投稿2017/02/06 05:26

編集2017/02/06 07:01
ttyp03

総合スコア16998

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

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

SugiuraY

2017/02/06 06:28

ご回答有難うございます。なるほど、ご指摘有難うございます。もともとの配列の個数をカウントするために準備した、$num,$num1,$num2はそれぞれ個数が異なりますが、これを何回ループさせるかは場合分けしなくてはならないと考えます。2次元配列で一括して2次の階層の配列をそれぞれの$numxでループさせることはできないので、結局、このような場合のは、それぞれのfor文を作成する(ネスト化させない)ほうが適切という印象を受けましたが、如何でしょうか?
ttyp03

2017/02/06 06:34 編集

配列の要素数はcount関数で取得できるので、それを利用しますね。 もしくは foreach を使うとか(要素数分のループ) 何はともあれ、質問にあるようなトリッキーなことをしなくてもやり方はいくらでもあるので、$numや$valueなどがどのような変数なのかを書いておくと、適切な回答が得られると思います。
SugiuraY

2017/02/06 06:53

ご返信有難うございます。 他の方からも質問の方法にご指摘を頂きましたので、 改めて質問内容も修正をさせて頂きました。
ttyp03

2017/02/06 07:02

修正案を追記しましたので、ご確認ください。 最初に回答したことを実現した回答になっています。
SugiuraY

2017/02/06 08:49

ご回答有難うございます。 確かにおっしゃる方法でシンプルに実現することが出来ました。 大変勉強になりました。 御礼を申し上げます。
guest

0

おそらくなさりたいことはできますが、変数名を
変数から作るのは処理的にバグの温床になりかねないので
やめたほうがいいです

念の為やり方としてはたとえば
${"num".$i4}
とか
${$num.$i4}
とかを使うことになります。

($numや$arrayとはなにか命題に記載がないので想像)

投稿2017/02/06 05:01

yambejp

総合スコア114779

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

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

SugiuraY

2017/02/06 06:30

ご回答有難うございます。 試みようとしていることはご想像の通りです。 変数に変数を入れる波括弧の記法を失念しておりました。また、これがバグの温床になる点まで考えが及んでいませんでした。非常に勉強になります。 素直にそれぞれのfor文を構築しようとおもいます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問