2017-08-31 10 views
1

私はplayer1player2player3 ... player12という名前の私のteamsテーブルの行を持っているためにループに変数名をインクリメント。 PHPスクリプトでは、私は変数($player1$player2 ...)としてそれらを設定し、それらがループしてNULLであるかどうか、そしてそれらがカウントされないかどうかをチェックしたいと思います。PHP/MySQLは - データ

PHPで変数を増やす方法を教えてください。私はそれをやってみたが、これは好きだ:

<? 
    $playerspicked = 0; 
    for($i = 1; $i <= 12; $i++) { 
     $playercheck = "$player"+$i; 
     if($playercheck != 0) { 
      $playerspicked++; 
     } 
    } 
?> 

しかし、これは動作しません。

+1

データを正規化してから、そのような汚い解法を使う必要はありません –

+0

@MarkBaker正規化するとどういう意味ですか? –

+0

私はあなたのデータベーステーブルを構造化しています....番号の付いた列名を持つことは、一般的に、各プレーヤーの行を持つ別のテーブルを使用する必要があることを示しています –

答えて

3

これは、変数名の前後に複雑な式(波カッコ[{}])を使用して実行できます。

if(empty(${"player$i"})) { 
    //player$i is empty 
} 

複雑な式を使用すると、変数名を動的に設定できます。あなたはより良いこれらの仕事は、私はあなたにもちょうどそう

$variable = "many test"; 
echo "this is a test echo. {$variable}"; 

私は一般的に多くの配列変数のための変数を生成するためにこれを使用するように、通常の文字列連結のようにこれらを使用することができます ことが示されます方法を理解するのに役立つ

そのキー

$array = array("key1" => "value1", "key2" => "value2"); 
foreach($array as $key => $value) { 
    ${$key} = $value; 
} 

に基づいて上記のコードは、それらに関連付けられた適切な値で、2つの変数、$key1$key2を作成します。

また、$を変数の先頭に追加することもできますが、これは読みにくく、何が起こっているか把握するのが難しいと思います。

$playercheck = "player"+$i; 
if($$playercheck != 0) { 
    $playerspicked++; 
} 
+0

これらのメソッドを共有してくれてありがとう、彼らは多くの助けになります! –

+0

@DamianDoman私はあなたを助けることができてうれしいです! :) – GrumpyCrouton

1

あなたの場合は、チーム内のすべてのノンヌルプレイヤーを数える簡単な方法があります。

エコーカウント(array_filter($ yourTeam));

2番目のパラメータを指定しないでarray_filter関数を実行すると、nullエントリが自動的に削除されます。

+0

ああ、公正なポイント! – GrumpyCrouton

+0

それは本当にシンプルで効果的なようです。プレーヤではない2つのテーブルなど、$ teamテーブルに複数の行がある場合、単純な算術でcount()を2減らしてください。 –