2011-01-31 1 views
0

非常に読みやすく、簡単に編集できるアイテムのリストをカンマで区切り、そのリストから3つのランダムなアイテムをエコーし​​たいとします。配列や文字列は重要ではありません。今のところ、私は、次の作業(ありがとうwebbiedaveを!)だArrayまたはStringリストをより読みやすい方法でシャッフルするにはどうすればいいですか?

$fruits = array('Mango', 'Banana', 'Cucumber', 'Pear', 'Peach', 'Coconut'); 

$keys = array_rand($fruits, 3); // get 3 random keys from your array 
foreach ($keys as $key) {   // cycle through the keys to get the values 
    echo $fruits[$key] . "<br/>"; 
} 

出力:個人的に、私は非常に :ここでは未解決の

Coconut 
Pear 
Banana 

だけの事は、リストは、私が望んだように読み取れないということです入力リストが引用符なしであることが非常に好ましい

(Mango, Banana, Cucumber, Pear, Peach, Suthern Melon, Coconut)

が容易に可能で、このです:?そうのように、好ましくは、意味、'Mango'とは対照的にMango入力いただきありがとうございます。

+3

あなたが 'array(....)'について話しているなら、これを変更する方法はありません。文字列はPHPでは引用符で囲む必要があります。それ以外のものはもっと読みやすく保守的ではありません... –

+0

PHPで配列を初期化する方法は、あなたが提供する引用符付きの文字列の配列よりも "正しい"方法はありません。構文が異なる場合は、別の言語に切り替えます。ルビーを試してみてください: 'fruits =%w {マンゴーバナナキュウリナシのピーチシュタラン\メロンココナッツ} – meagar

答えて

5
$input = explode(',', 'Mango, Banana, Cucumber, Pear, Peach, Suthern Melon, Coconut'); 
$input = array_map('trim', $input); 
+0

このアイデアをありがとう!このリストに1000個の項目がある場合、配列に対して20%以上の文字数がある場合、パフォーマンス上のペナルティはありますか? 'マンゴー 'は'マンゴー'より20%多いですか? – Sam

+0

配列の定義は、おそらく高速で、確かにアイテムがハードコーディングされている場合は好ましいソリューションです。あなたが怠け者である場合、PHPは文字列から配列を生成させることができます: '<?php var_export(array_map( 'trim'、explode( '、'、your、list、here '))); ?> ' – ThiefMaster

1

PHP標準には反対していません。

あなたはこのような

define(Mango, "Mango"); 

などの定数を定義し、あなたの配列でそれらを使用していますが、あなたが持っているしたい場合は、定数はすべて大文字

1

あるべきなそれは、naming conventions of PHPを台無しにしてしまう可能性がありeditable list、私は設定ファイルを作成し、そこからリストを読むことを提案します。

たとえば、YAMLsymfony YAML parserを使用できます。あなたのリストは次のようになります:

- Mango 
- Banana 
- Cucumber 
- Pear 
- Peach 
- Coconut 

これはあなたのコードとデータのよりよい分離です。また、要素を追加または削除するときに実際のコードに触れる必要がないので、長期的には保守性が向上します。

もちろん、あなたの場合は、1行に1つのエントリを持つ単純なテキストファイルを作成し、そのファイルを配列に読み込むことができます。

パフォーマンスが心配な場合は、生成された配列をディスクなどにシリアル化することができます。

関連する問題