
PHP初心者です。
foreachを使うときに、参考サイトのソースを見て???だったのですが、
例えば以下の場合に
foreach($_POST['hoge'] as $key => $val){
echo "$key : $val \n";
}
とありますが、hogeは自分で決めたものなので分かるのですが、
見に覚えの無い$key => $valといった変数で動作しています。
$keyや$valは自分で定義した覚えはありません。
調べると$keyは分かりませんが、$valはvalueの省略みたいな記述がありました。
また、他には更に短縮され、$kとか$vしか記述されていないソースもあり、
試すとこれでも正常に動いています。
これはどういうことなのでしょうか?
何か決まりがあるのでしょうか。
ちなみに、チェックボックスの配列取得の定義に使いました。
私からはただ勝手に短縮しているようにしか見えず納得いきません。
お詳しい方、どなたかアドバイス頂けないでしょうか。
宜しくお願いします。
No.2ベストアンサー
- 回答日時:
似たような話で、
<?php
$array=array("a","b","c");
for($i=0;$i<count($array);$i++){
print $array[$i];
}
?>
など、自分で宣言しなくても$iをカウンターとして使う暗黙のルールがあります。
この場合$iは整数値を表すINTの頭文字に由来していたりするようです。
(昔はIからNまでは整数としてあつかうルールがあった)
今のプログラミング言語では変数名に原則何をつかってもかまいませんが
ループのときはi,i,k・・・を使うというのが定着してしまっているので
あえて崩すと違和感をおぼえます。
こういうのは、あまり深く考えず「そんなもんか」程度に理解しておくほうが幸せです
有難うございます。
>>$iをカウンターとして使う暗黙のルールがあります。
こういうことって、どの参考書にも載っていないのでうれしい情報です。
また、気になる部分でもありました。
No.3
- 回答日時:
#PHP初心者というよりはプログラミング自体が初めてなんでしょうね
>$keyや$valは自分で定義した覚えはありません。
定義している必要はありません。foreachで処理する内容がセットされる(つまり受け取る)ための変数です。
http://www.php.net/manual/ja/control-structures. …
------- 引用ここから
最初の形式は、array_expressionで指定した配列に 関してループ処理を行います。各反復において現在の要素の値が $valueに代入され、内部配列ポインタが一つ前に 進められます。(よって、次の反復では次の要素を見ることになります。)
2番目の形式は、さらに各反復で現在の要素のキーを変数 $keyに代入します。
------- 引用ここまで
$keyとか$valueはあくまでも「仮に」書いているだけで、自分で好きな変数名を使えばいいです。その変数に値(あるいはキーの値)がセットされた状態でループ処理出来るというだけですから。
有難うございます。
>>#PHP初心者というよりはプログラミング自体が初めてなんでしょうね
はい、まさにその通りです。
>>foreachで処理する内容がセットされる(つまり受け取る)ための変数です。
なるほどです、1つのセットと覚えたほうが良いのでしょうか?
あまり変な部分に意識しないで進めたほうがよいのかもしれないですね・・・。
No.1
- 回答日時:
$keyも$valも$kも$vも単なる変数名です。
連想配列のforeachの構文は,
foreach ( 式 as キー変数 => 値変数 ) 文
です。
php.netのドキュメントの書き方も悪いとは思いますが,
変数名が$keyや$valueに固定されているわけではりません。
ありがとうございます。
>>変数名が$keyや$valueに固定されているわけではりません。
なるほど、ただの一例という意味なのですね。
foreach ( 式 as キー変数 => 値変数 ) 文
分かりやすかったです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
foreachで上限回数指定方法また...
-
Ruby 2次元のハッシュ
-
smartyでtplファイルでの2次元配列
-
配列Xの平均値を求める関数副プ...
-
多次元配列を、1次元の配列にす...
-
C言語の配列をPush(追加)する...
-
$_SESSIONに二次元配列を使える...
-
配列をループでたくさん宣言し...
-
チェックボックス複数選択 mys...
-
ログファイルの古い日付の行を...
-
変数で来た指定日に対して、+3...
-
Smarty 三次元配列を使いたい
-
漢字のソートについて
-
PHPで外部ファイルを読み込むと...
-
2重配列の使い方について
-
”番号”の項目で”01234”とつかさ...
-
CArrayの要素としてCStringArra...
-
LaTeX 対角成分だけ表示する方法
-
mb_encode_numericentityでタグ...
-
csvの内容を行単位で削除したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
MySQLから受け取ったデータを連...
-
変数に格納された文字列でdefin...
-
先頭0で重複のない配列を作りたい
-
array関数につきまして
-
oreachで変数を用意せずにカウ...
-
関数をの引数について。
-
PHPの配列の出力について
-
配列からプルダウン用のHTMLを生成
-
規則性があるテキストをグルー...
-
forを使わずにforeach文のみで...
-
連想配列からの値の取り出し
-
POSTで渡されるデータの数がわ...
-
PHPでテキストファイルを読み込...
-
PHPで、'=>'の意味が分かりませ...
-
phpでforeachの中にforeachがあ...
-
php 2つの配列の内、片方を元に...
-
foreachで上限回数指定方法また...
-
POSTを配列として送信し、キー...
-
多次元配列の扱い方
-
PHPの構文で間違えが分からない
おすすめ情報