注意这不是一个面试题,也别喷『谁写出这样代码拉出去枪毙 5 分钟』,顺便说一句,我确实写过这样的代码...
<?php
function getReferer($link)
{
    $refMap = [
        'baidu' => '百度',
        'sougou' => '搜狗',
        '360' => '360',
        'google' => '谷歌'
    ];
    foreach ($refMap as $key => $value) {
        if (strpos($link, $key) !== false) {
            return $value;
        }
    }
    return '其他';
}
echo getReferer('https://www.google.com/search?workd=%FD%##%#%E%D%D%D%D%D%D%');
so, what's the output?
|  |      1Arrowing      2017-07-24 12:17:36 +08:00 谷歌,好像没掉坑里吧? (捂脸。。。 好久没碰 PHP 了,现在可以数组可以直接用[]了么? | 
|  |      2ety001      2017-07-24 12:20:26 +08:00 360 | 
|  |      3580a388da131      2017-07-24 12:20:40 +08:00 @Arrowing 5.4 开始就可以了,现在都到 7 了 | 
|      4gdtv      2017-07-24 12:21:40 +08:00 我测试了一下,返回的是“ 360 ”,求解释 | 
|  |      5XiLiGe      2017-07-24 12:27:27 +08:00 360 | 
|      6elvodn      2017-07-24 12:29:18 +08:00 strpos("$link", "$key") | 
|  |      7FYK      2017-07-24 12:30:45 +08:00 strpos:( https://secure.php.net/manual/zh/function.strpos.php): mixed strpos ( string $haystack , mixed $needle [, int $offset = 0 ] ) 如果 needle 不是一个字符串,那么它将被转换为整型并被视为字符的顺序值。 | 
|  |      8jfcherng      2017-07-24 12:31:52 +08:00  1 $key 裡的 '360' 被當成了 int 解釋,於是成了 `if (strpos('h...', 360) !== false)` 而 360 轉成 ascii char,360%128 = 104 = 'h',於是 `strpos('h...', 360)` 返回 0 可能是這樣? | 
|  |      9niuoh      2017-07-24 12:33:20 +08:00 strpos('h',360)!==false strpos 函数 第二个参数为整数时自动转成 ascii 码 360 大于 256 个 ascii 码总数 所以把他减去 256 的 360-256=104 chr(104)='h' | 
|      10yalanaika      2017-07-24 12:45:10 +08:00 弱类型在这里真的太可怕了 | 
|  |      11solaro      2017-07-24 12:49:20 +08:00 哎呦,有点意思 | 
|      12mooncakejs      2017-07-24 12:51:05 +08:00 via iPhone 这这个陨石坑啊 | 
|  |      13reus      2017-07-24 12:57:18 +08:00 PHP 是世界上最垃圾的语言 | 
|  |      140x0      2017-07-24 13:01:00 +08:00  1 CTF 又有新素材了… | 
|  |      15levn      2017-07-24 13:04:51 +08:00  1 是数组键值的类型转换不是 strpos 吧。 “ key 可以是 integer 或者 string。value 可以是任意类型。 此外 key 会有如下的强制转换: 包含有合法整型值的字符串会被转换为整型。例如键名 "8" 实际会被储存为 8。但是 "08" 则不会强制转换,因为其不是一个合法的十进制数值。 浮点数也会被转换为整型,意味着其小数部分会被舍去。例如键名 8.7 实际会被储存为 8。 布尔值也会被转换成整型。即键名 true 实际会被储存为 1 而键名 false 会被储存为 0。 Null 会被转换为空字符串,即键名 null 实际会被储存为 ""。 数组和对象不能被用为键名。坚持这么做会导致警告:Illegal offset type。 ” | 
|  |      16Takahashi      2017-07-24 13:11:43 +08:00 strpos()和 strstr()是一回事吗 | 
|  |      17sagaxu      2017-07-24 14:00:39 +08:00 list/map 不分是个坑,动态类型是个巨坑,弱类型是个天坑。最好的语言,门槛很低,坑很深 | 
|      18fork3rt      2017-07-24 14:05:12 +08:00  1 强制转一下类型就好了。  if (strpos($link, strval($key)) !== false) { return $value; } | 
|  |      19nfroot      2017-07-24 14:28:28 +08:00 居然坑这么大 吓死人! | 
|      21quericy      2017-07-24 14:48:09 +08:00  1 就算不踩坑,逻辑还是有问题 getReferer('https://www.google.com/#q=baidu'); | 
|  |      23RLib      2017-07-24 15:22:08 +08:00 哦, 有问题 | 
|  |      24joeke      2017-07-24 15:29:43 +08:00  1 弱类型很可怕啊,这种问题 还很难找出来的,坑了 | 
|  |      25zjsxwc      2017-07-24 15:52:15 +08:00 使用 mb 系列的字符串操作,试试 mb_strpos | 
|  |      26leafx      2017-07-24 16:34:30 +08:00 好吧,我承认我应该被拉出枪毙 5 分钟, | 
|  |      27imbin      2017-07-24 22:54:23 +08:00 好吧 我也一下子没看出坑的位置 | 
|      28chahualao      2017-07-25 17:23:58 +08:00 我不适合当程序员 |