PHPで0,1,2,3...と自動的に連番を振りたいと思っています。

具体的には配列のインデックスを自動的に割り当てるためです。
通常は下記のようにすれば問題ないと思うのですが、
$i = 0;
print $A[$i++];
print $A[$i++];
print $A[$i++];
この方法ですとifなど条件分岐した場合、
実際に読み込まれなかった部分の$i++はカウントされません。
実際に読み込まれるかどうか関係なく、
PHPスクリプトに書かれている順で、
連番を割り当てる方法はないものでしょうか?

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2011/09/28 09:56:26
  • 終了:2011/10/05 10:00:03

回答(2件)

id:taknt No.1

きゃづみぃ回答回数13481ベストアンサー獲得回数11982011/09/28 10:03:57

print $A[$i++]; を

$i++; と

print $A[$i]; に分けるしかないです。

それで if文とは 関係なしに $i++; すればいいだけです。

id:shinwa-tokyo

ご回答ありがとうございます。

>print $A[$i]; に分けるしかないです。

やっぱりそうですよね。

変数に頼らず、

スクリプトに登場する順でオートインクリメントするような機能は、

やっぱりないのでしょうかね…。

2011/09/28 11:23:12
id:tobeoscontinue No.2

tobeoscontinue回答回数212ベストアンサー獲得回数522011/09/28 11:54:35

print array_shift($A)

するという手もあります。

書かれている順ということではないのでif文などではやはり考慮が必要ですし、

位置を特定するのは逆に面倒でしょう。

$A[$i++]をarray_shift($A)に全置換で修正できます。

id:shinwa-tokyo

ありがとうございます。

array_shiftを使うという手もあるのですね。

参考になりました。

2011/09/28 16:26:00
  • id:tobeoscontinue
    extractを使うと連想配列から変数を作ることができます。

    <?php
    $A = array("abc\n","def\n","ghi\n","jkl\n","mnl\n");

    $h = array();
    foreach ($A as $k=>$v) {
    $h["A".$k] = $v; }
    extract($h);

    print $A0;
    print $A1;
    print $A2;
    print $A3;
    print $A4;

    ?>
    $Aから名前を付けた連想配列$hを作りextractすれば変数$A0,...$A4が生成されます。
    変更は大変でしょうがif文などは影響を受けません。
    foreachでの$kの値は配列によっては連番になっていない場合があるので$k++のように計算するやり方のほうが安全かもしれません。
  • id:shinwa-tokyo
    ありがとうございます。
    extractは知りませんでした。
    この方法は今回の目的に利用できそうです。
    参考になりました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません