2011-03-31

史上最强大的PHP Web面试题(会做就能进百度)

Views: 62901 | 58 Comments

注: 只要你会做了这道题目, 你的能力已经可以进入百度了! 如果别的部门不要你, 请你给我发邮件, 我一定尽我所能强烈推荐你! 如果你不想加入百度, 而别的公司又不要你, 只能说明那家公司瞎眼了.

题目: 见图片, 该图是某网页的一个区域的截图, 用于显示商品或者其它信息的分类. 该分类的每一项可以折叠和收起(展开和收缩, 如果有子分类的话). 分类的级数不固定. 现有一个PHP变量:

$cats = array(
    array(
        'id' => 1,
        'name' => '学术和教育',
        'children' => array(
            array(
                'id' => 2,
                'name' => '自然科学',
                'children' => null,
            ),
            // ...
        ),
    ),
    // ...
);

请写一段PHP代码, 将该数组所包含的分类数据生成一段能实现如图片所示功能的HTML/JavaScript代码, 可不考虑CSS样式.

----------

注解: 这道题目考察的范围非常广, 包括PHP, HTML, JavaScript, CSS, 递归, 只有真正掌握了如上几种全部技能, 才能实现完整的功能, 否则必须依赖分工. 应聘者所能实现的程度越大, 得分就越高.

如果应聘者的应聘职位不包括HTML/JS/CSS, 那么题目可改为: 把上面的PHP数据用缩进换行文本的形式保存到文件, 并读取文件生成一个同样的PHP数组.(自定义格式的序列化和反序列化)

看到这篇日志的读者, 如果已经做了出来, 并且个人想加入百度, 请在评论中回复URL并说明你的意愿, 我会主动联系你. 或者你可以把程序打包发给我.


----------

你想加入百度吗?

  查看结果

Loading ... Loading ...

Related posts:

  1. 史上最强大的PHP MySQL操作类
  2. 最简单的JavaScript两级联动示例
  3. 程序员薪水调查 – 80%月薪不超过10K
  4. JavaScript+jQuery两栏选择控件
  5. 如何让 PHP json_encode 函数不转义中文?
Posted by ideawu at 2011-03-31 16:57:24 Tags:

58 Responses to "史上最强大的PHP Web面试题(会做就能进百度)"

  • /*刚来北京,是挺想进的,呵呵*/
    <?php
    $cats = array(
    array(
    ‘id’ => 1,
    ‘name’ => ‘学术’,
    ‘children’ => array(
    array(
    ‘id’ => 8,
    ‘name’ => ‘学术A’,
    ‘children’ => array(
    array(
    ‘id’ => 9,
    ‘name’ => ‘学术B’,
    ‘children’ => null,
    ), array(
    ‘id’ => 10,
    ‘name’ => ‘学术C’,
    ‘children’ => null,
    ),
    array(
    ‘id’ => 11,
    ‘name’ => ‘学术D’,
    ‘children’ => array(
    array(
    ‘id’ => 12,
    ‘name’ => ‘学术D1′,
    ‘children’ => null,
    ),
    ),
    ),
    // …
    ),
    ),
    // …
    ),

    ),
    array(
    ‘id’ => 2,
    ‘name’ => ‘教育’,
    ‘children’ =>array(
    array(
    ‘id’ => 13,
    ‘name’ => ‘A教育’,
    ‘children’ =>array(
    array(
    ‘id’ => 14,
    ‘name’ => ‘B教育’,
    ‘children’ =>null,
    ),
    ),
    ),
    array(
    ‘id’ => 15,
    ‘name’ => ‘C教育’,
    ‘children’ =>null,
    ),
    ),
    ),
    array(
    ‘id’ => 3,
    ‘name’ => ‘生活’,
    ‘children’ =>null,
    ),
    array(
    ‘id’ => 4,
    ‘name’ => ‘运动.休闲’,
    ‘children’ =>null,
    ),
    array(
    ‘id’ => 5,
    ‘name’ => ‘大众文化’,
    ‘children’ =>null,
    ),
    array(
    ‘id’ => 6,
    ‘name’ => ‘娱乐’,
    ‘children’ =>null,
    ),
    array(
    ‘id’ => 7,
    ‘name’ => ‘城市.区划’,
    ‘children’ =>null,
    ),
    // …
    );

    function showtree($cats)
    {
    $html = ”;
    $arrayCast = array();
    $rows = count($cats);
    for($i = 0; $i < $rows; $i++)
    {
    $id = $cats[$i]['id'];
    $name = $cats[$i]['name'];
    $arrayCast = $cats[$i]['children'];
    $html .= ‘<li>';
    if ($arrayCast != null)
    {
    $html .= "<a href=’javascript:void(0)’ onclick=’retractable(".$id.")’><span id=’span".$id."’>+</span>".$name."</a>";
    }
    else
    {
    $html .= ”.$name.”;
    }
    $html .= ‘</li>’ ;
    if ($arrayCast != null)
    {
    $html .= ‘<ul id="ul’.$id.’" style="display:none">';
    $html .= showTree($arrayCast);
    $html .= ‘</ul>';
    }
    }
    return ‘<ul>’.$html.'</ul>';
    }
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
    <html xmlns="http://www.w3.org/1999/xhtml"&gt;
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>baidu test</title>
    <style type="text/css">
    ul {margin:0px; width:100px; list-style:none;padding-left:30px;}
    ul li{width:100px;;}
    ul li a{text-decoration: none; }
    ul li a:hover{ color:#F00; text-decoration: none;}
    </style>
    <script type="text/javascript" language="javascript">
    /*
    @Retractable 展开或收起li标签
    @parm ulid : obj ul标签id
    @parm signid:string +-符号id
    @author zhaolei
    */
    function retractable(signid)
    {
    var spansign = document.getElementById(‘span’ + signid);
    var ulid = document.getElementById(‘ul’ + signid);
    if (spansign.innerHTML == ‘-‘)
    {
    spansign.innerHTML = ‘+';
    ulid.style.display = ‘none';
    }
    else
    {
    spansign.innerHTML = ‘-‘;
    ulid.style.display = ‘block';
    }
    }
    </script>
    </head>
    <body>
    <div>
    <?php echo showtree($cats);?>
    </div>
    </body>
    </html> Reply
  • echo ‘<style>ul, li{list-style:none;}</style>';
    function tree( $root ) {
    echo ‘<ul>';
    for($i = 0; $i < count($root); $i++) {
    if( $root[$i]['children']) {
    echo "<li>↓{$root[$i]['name']}</li>";
    tree($root[$i]['children']);
    }else {
    echo "<li>{$root[$i]['name']}</li>";
    }
    }
    echo ‘</ul>';
    }

    tree($cats); Reply
  • 博主是***? Reply
  • 能很好的搞定这个Case,对于大公司已经OK了。毕竟入职所涉及的范围已经被限定。这个招聘方式定位很明确。 Reply
  • 做了这个就能进百度? 呵呵 话说其实挺想进的~~~ Reply
  • demo site:http://www.kayonees.com/tree/ Reply
  • 按照我的设计方案做了一个demo,第一级的列表是php输出的,之后的使用动态加载的,还没有实现的是自动清除不用的dom元素功能 Reply
  • 这明显是骗码的.
    >>4. ideawu Says:
    >>2011-03-31 at 18:13:08
    >>上面的同学, 不知道是否愿意应聘百度? 如果能做成一个网页, 包括租空间(或者>>VPS), 申请域名, 完成完整的功能就太好了. Reply
  • function tree($arr)
    {
    foreach( $arr as $key=>$value)
    {
    echo "<ul>";
    echo "<ul>".$value['name']."</ul>";
    if(is_array($value['children']))
    {
    tree($value['children']);
    }
    echo "</ul>";
    }
    } Reply
  • 在这里留言吧,其实这应该是一个无极分类的概念,你在构造这棵树的时候,可以把深度加进去,通过深度就很容易解决问题了 Reply

« [1][2][3][4][5][6] » 2/6

Leave a Comment