2009-04-27 3 views
3

switch文にある(ケース)インスタンスの総数を返す方法はありますか?PHPでは、switch文のcase文の総数を取得できますか?

$id = $_GET['id']; 

switch ($id) { 
    case "item1" : 
    $data = 'something1'; 
    break; 

    case "item2" : 
    $data = 'something2'; 
    break; 
} 

echo $data; 

しかし、このようなswitch文を含む複数のファイルがありますが、その数はファイルによって異なります。私は理想的に "id"をインクリメントしてこれらのswitch文をループすることができるようにしたいと思います。これが可能ならどんなアイディアですか?

+2

。たぶんあなたが解決しようとしている問題について説明したなら、それを手伝うことができます。 「ケース・ケースを数える」という解決策は、最良のアプローチではないようです。 –

+0

どちらもありませんが、私には今までに何をしたいかのためのより良い解決策があるようです。 – Moutaz

+0

私はちょうど私たちが望むものを実行する他の人のコードを書き直さないようにしようとしています:)私は基本的に、非データベース検索エンジンのサイトのすべてのセクションのインデックスを作成しています。サイトを構築した人は、一部のswitch文からデータの一部をロードするためにjqueryを使用しました。 Jqueryは、URLに渡されたID変数を持つphpファイルのURLをロードします。これは、スイッチ/ケースが適切な対応するデータを返します。データベースがないので、スイッチをループして文字列を比較すると、正しいものを返すことができました。それは一言...良いアイデアですか? –

答えて

1

$ idの値を変更せずにbreak文を削除することなく、目的を破ることはできません。何人知る必要があるのでしょうか?

私はちょうどあなたがちょうどあなたの代わりにarrayを使用することができ、別の値に基づいて値を代入している場合について

find -name '*php' | xargs grep 'case' 
7

を知りたいファイルをgrepします:

$idToData = array(
    'item1' => 'something1', 
    'item2' => 'something2', 
); 
$data = 'default'; 
if (isset($_GET['id']) && array_key_exists($_GET['id'], $idToData)) { 
    $data = $idToData[$_GET['id']]; 
} 
echo $data; 

利点を配列の数はextendedであり、アイテムの数は数えてcount()

+0

書いている途中であった、+1。ここに$ id/$データの相関関係がある場合、配列はそのジョブの正しいツールのように聞こえるでしょう。 – zombat

1

であることがわかりますfter。あなたができることは、カウントしようとするのではなく、ループを終了するdefault:caseを追加することです。例えば。

for($id = 1; !$quit; $id++) 
{ 
    switch("item" . $id) { 
    case "item1": 
     // Do something 
     break; 
    case "item<n>": 
     // Do something else 
     break; 
    default: 
     $quit = true; 
    } 
} 

質問:ループとケースステートメントを使用せずに、この文をすべて実行してみましょう。

+0

私はこれが彼が後にした答えだと思いますが、他のすべてのファイルをどのように手助けするのかは分かりません。XD idをインクリメントしながら各ファイルの関数呼び出しをループすることができると思います。次に、デフォルトの戻り条件をチェックするだけで、存在しない場合はnullを返すことができます。 – Louis

1

あなたはおそらくtoken_get_all()と尋ねることができますが、実際にはの問題に最適な解決策ではありません。

0

OK、のURLは次のようになりましょう:

somesite.com/ajax/getinfo.php?id=news

その後、あなたは$ _GET [ID]の値を取り、でそれを処理することができますスイッチ。それが正しくない場合

$section=$_GET[id]; 
switch($section) { 
case "1": 
break; 
. 
. 
. 
default: 

} 

、ので、私の英語恩赦:私はcorreclyあなたのコードを想像した場合

。それをもう少し説明してください、まだ少し曖昧です。

1

実際にはtoken_get_all()を使用してこれを確実に行うことができます。この関数をfind all the define() usages in a PHP fileに使用した例を次に示します。 switchステートメントとそれに続く従属caseステートメントを探すために、リンクステートマシンと同様の有限状態マシンを構築する必要があります。ネストされたswitch文を正しく処理するかどうかを確認したい場合もあれば、したくない場合もあります。

0

実は、このコードは動作します:私は本当にあなたが何をしようとして理解していない

$i = 0; 
switch(something) 
{ 
    case "item".$i++: //something 
     break; 
    case "item".$i++: //something 
     break; 
    default: //something 
     break; 
} 
関連する問題