脳内メーカーみたいなジェネレーター - PHPプロ!Q&A掲示板

2508

  • 0P

脳内メーカーみたいなジェネレーター

質問日時 / 2010年2月9日 07:02    回答数 / 2件

Questioner:  hayato0210  このエントリーをはてなブックマークに追加 

キーワード / キーワードが設定されていません

どうしても思い浮かばないので質問させて頂きました。
言語はPHP5です。

文字列の数値化

ユーザーが入力した文字によって出力する数字を変えたいです。
しかし完全にランダムに出力するのではなく
この文字ならこの数値といった具合にしたいです。

例)
猫旅 ⇒ 80
あいう ⇒ 100
猫旅 ⇒ 80
あいう ⇒ 100

数値は0~100まででます。

といいますのも現在、自分のサイトに訪問して頂いた方に
戦闘力スカウターというコンテンツを提供しようと思っております。
一時期はやった脳内メーカーの様なものです。

わかりにくい説明で申し訳ないのですが
どのようにすれば実現できそうでしょうか・・・。

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┣A01shimix単に0~100にするのでよければ、こんな感じでどうでし
┗A02mgngmgng以前おなじようなのつくろうとした際は、 以下のよう

回答一覧

並び替え:

A01
answerershimix [2月9日 08:55] (最終編集:2月9日 09:37)

単に0~100にするのでよければ、こんな感じでどうでしょう

  1. $str = '対象とする文字列';
  2. $weight = array(5002, 16981, 36781, 8691, 334257, 48531, 116); // 適当に重み付け
  3. $val = 0;
  4. $wct = 0;
  5. for ($i = 0; $i < strlen($str); $i++){
  6.   $val += ord(substr($str, $i, 1)) * $weight[$wct];
  7.   if (++$wct >= count($weight)) { $wct = 0; };
  8. }
  9. $score = $val % 101;

#101とおりの値になるけど、本当に0~100でいいのかな



(追記)
「重み付け」はあまり(というか全然)意味がないですね(汗

  1. $str = '対象とする文字列';
  2. $val = 0;
  3. for ($i = 0; $i < strlen($str); $i++){
  4.   $val += ord(substr($str, $i, 1)) * ($i + 1);
  5. }
  6. $score = $val % 101;

でじゅうぶんかも

この意見に回答する

ツリーへ TOPへ

A02
answerermgngmgng [2月9日 10:07] (最終編集:2月9日 10:10)

以前おなじようなのつくろうとした際は、
以下のような感じでPHP関数まかせで適当にでっちあげました。
ご参考まで。

  1. <?php
  2. function aaa($s){
  3.   mt_srand(crc32($s));   // crc32で適当にseedを与えて
  4.   return mt_rand(0,100)// 0~100の範囲の乱数を生成
  5. }
  6.  
  7. var_dump(
  8.   aaa('猫旅'),
  9.   aaa('あいう'),
  10.   aaa('猫旅'),
  11.   aaa('ほげ')
  12. );

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
PHPのHTML埋め込み記述について
 このエントリーをはてなブックマークに追加 
A
$_POST["data"] == "男" ? $val = "checked" : $val = "" ; の意味は以下と同じです。 if($_POST["data"] == "男"){ $val = "checked; } e...

>>続きを読む

kende様のご指摘通り、三項演算子を使用する際には、コードの複雑度などを考慮する必要がありますね。書きやすさと共に可読性も追求したいところですね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)