作者 : Bun Wong
日期 : 2009年08月04日
标签 : PHP Game
浏览 : 1129 次
评论 : 5 个
http://www.hdwong.com/article/name-analyticator.html

名字成分分析的小玩意

技术交流 @ 2009年08月04日 收藏&分享

昨天找一些 SNS 的案例,无意中回到一年多前曾留意过的 Geekaa.com,里面那个名字成分分析挺有意思的,它可以根据输入的名字 (里面是用帐户名) 来计算出你的成分,就类似人家街上算命卜卦的老先生一样,当然跟人家那样引经据典的忽悠你不同,也很无厘头,但相信还是一个很有趣的点子吧...

网上也有很多类似的算法,这里我就贴出一份我自己修改过的,让大家参考参考 :)

  1. 把名字作散列运算 (比如 MD5, SHA1 等)

  2. 把散列结果分段,一部分作为计算成分索引值,一部分作为计算成分的含量值

  3. 组合结果,输出

以下是源代码

$elements = array(
  '尸毒',
  '御宅气',
  '高手高手高高手',
  '杂鱼',
  '高频杂讯',
  '黑暗',
  '死灵怨影',
  '三锂水晶',
  '空间扭曲',
  '时空断层',
  '微型黑洞',
  '微波雷射',
  '化尸水',
  '王水',
);
 
function analyze($name)
{
  global $elements;
  $name = strtoupper($name);
  $hash = md5($name);
  $chunks = str_split($hash, 2);
  $count = count($chunks);
  $elementsCount = count($elements);
  $result = array();
  $total = 0;
  for ($i = 0; $i < $count; $i += 2) {
    $key = hexdec('0x' . $chunks[$i]) % $elementsCount; // 计算出索引值
    $value = pow(hexdec('0x' . $chunks[$i + 1]), 3); // 计算出含量值, pow(3) 是为了增大差距
    if (!isset($result[$key])) {
      $result[$key] = 0;
    }
    $result[$key] += $value;
    $total += $value;
  }
  foreach ($result as &$value) {
    $value = number_format($value / $total * 100, 2);
  }
  arsort($result);
  return $result;
}
 
function output($result)
{
  global $elements;
  echo '<ul>';
  foreach ($result as $key => $value) {
    if ($value > 0.1) { // 含量值太低就不用显示出来了
      echo '<li>' . $elements[$key] . ' : ' . $value . '%</li>';
    }
  }
  echo '</ul>';
}
 
$result = analyze('Bun');
output($result);

Demo 点击这里

评论 (5)

  • #1. haturn

    2009年08月04日

    呵呵。。。好好玩!!

  • #2. 非主流bun叔

    2009年08月05日

    bun 的成分分析 : 非主流 43.74%

  • #3. Bun Wong

    2009年08月06日

    你才是非主流, 你全家都是非主流...

  • #4. Crysis

    2009年08月21日

    怎么让$name的值为我另一个variable的值?

    假设我的var值可以通过 get_name(); 得到。

    我试过:
    1. $name = get_name;
    $result = analyze($name);

    2. $result = analyze(get_name);

    都不能 :<

  • #5. Bun Wong

    2009年08月23日

    楼上的应该是

    $result = analyze(get_name());

    吧...

* 昵称:

* 评论:

* 验证码: (请输入下图的 4 位数字)

Captcha看不请, 换一张

© 2011 Bun Wong

本博客基于 Bun PHP Framework 构建 • 粤ICP备07036370号