这是PHP软件工程师的面试题,我自己太菜做对的没有几道,那职位工资相对都比较高,可惜啊,现在放上来给大家帮看看,自己也可以跟着学学,谢谢啊!!

解决方案 »

  1.   

    第五题也许会决定薪资.
    第三范式要求已经比较低了,如果您能讲得很好,老板会赏识你的.
    Php开发用EA建模,因为Rose不支持Php代码生成.
    个人喜欢Runloader.版本控制当然也就SVN了.冒泡不会没搞过吧?
    流程的话,要看情况了,有时先建模,有时先狂写一气再说:)
    其它问题查查手册很快就能解决的.
    给分,谢谢……
      

  2.   

    <pre>
    <?php
    class engage
    {
    public function getArray()
    {
    $arr1 = array (
    '0' => array ('fid' => 1, 'tid' => 1, 'name' => 'Name1' ),
    '1' => array ('fid' => 1, 'tid' => 2 , 'name' => 'Name2' ),
    '2' => array ('fid' => 1, 'tid' => 5 , 'name' => 'Name3' ),
    '3' => array ('fid' => 1, 'tid' => 7 , 'name' => 'Name4' ),
    '4' => array ('fid' => 3, 'tid' => 9, 'name' => 'Name5' )
    );
    $arr2 = array();
    foreach ($arr1 as $key => $value)
    {
    $arr2[$value['fid']][] = array('tid' => $value['tid'],'name' => $value['name']);
    }
    return $arr2;
    }
    //print_r($arr2);
    //$eString = 'open_door';
    public function getString($eString = null)
    {
    $eString = explode('_',$eString);
    $eString = array_map("ucfirst",$eString);
    $eString = implode($eString,'');
    return  $eString;
    }
    /**
     * 冒泡排序 
     * @return unknown
     */
    public function getBubble()
    {
    $isOver = false;
    $bubbleArray =  array(10,2,36,14,10,25,23,85,99,45);
    $bubbleResult = $bubbleArray;
    do{
    $bubbleArray = $bubbleResult;
    $isOver = true;
    foreach ($bubbleArray as $key => $value)
    {
    if ($value < $bubbleResult[$key-1])
    {
    $bubbleResult[$key]=$bubbleResult[$key-1];
    $bubbleResult[$key-1]=$value;
    $isOver = false;
    }
    }
    }while (!$isOver);
    return $bubbleResult;
    }}
    $engage = new engage();
    print_r($engage->getArray());
    echo $engage->getString('make_by_id');
    print_r($engage->getBubble());
    ?>
    </pre>好玩:)
      

  3.   

    还少了一题,,,现在加上,大家看看啊,,谢谢啦!!
     (2)要求写一段程序,实现以下二维数组$arr1转换成三维数组$arr2:
    $arr1 = array (
    '0' => array ('fid' => 1, 'tid' => 1, 'name' =>'Name1' ),
    '1' => array ('fid' => 1, 'tid' => 2 , 'name' =>'Name2' ),
    '2' => array ('fid' => 1, 'tid' => 5 , 'name' =>'Name3' ),
    '3' => array ('fid' => 1, 'tid' => 7 , 'name' =>'Name4' ),
    '4' => array ('fid' => 3, 'tid' => 9, 'name' =>'Name5' ) 
    );
    $arr2 = array ( 
    '0' => array ( 
    '0' => array ( 'tid' => 1, 'name' => 'Name1'),
    '1' => array ( 'tid' => 2, 'name' => 'Name2'),
    '2' => array ( 'tid' => 5, 'name' => 'Name3'),
    '3' => array ( 'tid' => 7, 'name' => 'Name4')
    ),
    '1' => array ( 
    '0' => array ( 'tid' => 9, 'name' => 'Name5' ) 
    )
    );
      

  4.   

    $arr1   =   array   ( 
    '0'   =>   array   ('fid'   =>   1,   'tid'   =>   1,   'name'   => 'Name1'   ), 
    '1'   =>   array   ('fid'   =>   1,   'tid'   =>   2   ,   'name'   => 'Name2'   ), 
    '2'   =>   array   ('fid'   =>   1,   'tid'   =>   5   ,   'name'   => 'Name3'   ), 
    '3'   =>   array   ('fid'   =>   1,   'tid'   =>   7   ,   'name'   => 'Name4'   ), 
    '4'   =>   array   ('fid'   =>   3,   'tid'   =>   9,   'name'   => 'Name5'   )   
    ); $arr2 = array();
    $i = 0;
    foreach($arr1 as $key => $val)
    {
    unset($val['fid']);
    $arr2[$i][] = $val;
    if($key == 3)$i++;
    }
    echo "<Pre>";echo var_dump($arr2);exit;
      

  5.   

    先说说第三题吧,第三题可以用explode把_分开,然后用一个可以把头拼音变成大写的函数将其变成Open这样的,最后用implode连接就可以了。
      

  6.   

    4T$array1 = array(
    array(
    'fid' => 1,
    'tid' => 1,
    'name' => 'Name1'
    ),
    array(
    'fid' => 1,
    'tid' => 2,
    'name' => 'Name2'
    ),
    array(
    'fid' => 1,
    'tid' => 5,
    'name' => 'Name3'
    ),
    array(
    'fid' => 1,
    'tid' => 7,
    'name' => 'Name4'
    ),
    array(
    'fid' => 3,
    'tid' => 9,
    'name' => 'Name5'
    ) );$countArray = count($array1);
    $newArray = array();
    $array2 = array();
    for ($i = 0; $i < $countArray; $i++)
    {
    extract($array1[$i]);
    $newArray[$fid][] = array(
    'tid' => $tid,
    'name' => $name
    );
    }
    foreach($newArray as $value)
    {
    $array2[] = $value;
    }
    print_r($array2);
      

  7.   

    不知道这么搞第3题,行不行。。是他要的那个意思么?<?php 
    $str="how_are_you!";
    $expStr=explode("_",$str);
    for($i=0;$i<count($expStr);$i++)
    {
    echo ucwords($expStr[$i]);
    }
    ?>
      

  8.   

    晕,刚看到,还要函数
    函数就成这个样子了 <?php function str_change($objstr)
    {
    $str=$objstr;
    $expStr=explode("_",$str);
    for($i=0;$i<count($expStr);$i++)
    {
    echo ucwords($expStr[$i]);
    }
    }

    ?>
    <?php str_change("wo_yun_a_shui_zhe_me_bian_tai!!")?>
      

  9.   


    11   两张表   city表和province表。分别为城市与省份的关系表。 
    city: 
    id City Provinceid 
    1 广州 1 
    2 深圳 1 
    3 惠州 1 
    4 长沙 2 
    5 武汉 3 
    ………. 广州 
    province: 
    id Province 
    1 广东 
    2 湖南 
    3 湖北 
    ………. 
    (1) 写一条sql语句关系两个表,实现:显示城市的基本信息。? 
    (2) 显示字段:城市id   ,城市名,   所属省份   。 
    select id,city,province from city where provinceid = (select id from province);也不知道对不对,哈哈
      

  10.   

    <?php
    function str_ok($object){
    $object=ereg_replace("_"," ",$object);
    $object=ucwords($object);
    $object=ereg_replace(" ","",$object); return $object;
    }
    $str="open_door_ok";
    $str=str_ok($str); echo $str; //OpenDoorOk
    ?>
      

  11.   

    没有手册和ZDE,现在基本上写不出什么-___-!!
      

  12.   

    呵呵,楼主还是加分吧!这么好的题!不要吝啬啊!
    高手都不太愿做功课!俺查了一下手册,不 对的地方请指正!1、得到本页
       echo $_SERVER["PHP_SELF"];
       ip
       echo  $_SERVER["REMOTE_ADDR"];2\计算时间差
        手册上标准:
        $oldday=mktime(0,0,0,$month,$day,$year);
       $today=mktime();
       $ageunix=$today-$oldday
        $age=floor($ageunix/365*24*60*60)
        这个效果不好,等高手其他方法
      

  13.   

    3、SysTem128 的答案近乎完美//$eString = 'open_door';
        public function getString($eString = null)
        {
            $eString = explode('_',$eString);
            $eString = array_map("ucfirst",$eString);
            $eString = implode($eString,'');
            return  $eString;
        }
      

  14.   

    4、SysTem128   的答案也非常好
      
     public function getArray()
        {
            $arr1 = array (
            '0' => array ('fid' => 1, 'tid' => 1, 'name' => 'Name1' ),
            '1' => array ('fid' => 1, 'tid' => 2 , 'name' => 'Name2' ),
            '2' => array ('fid' => 1, 'tid' => 5 , 'name' => 'Name3' ),
            '3' => array ('fid' => 1, 'tid' => 7 , 'name' => 'Name4' ),
            '4' => array ('fid' => 3, 'tid' => 9, 'name' => 'Name5' )
            );
            $arr2 = array();
            foreach ($arr1 as $key => $value)
            {
                $arr2[$value['fid']][] = array('tid' => $value['tid'],'name' => $value['name']);
            }
            return $arr2;
        }
      

  15.   

    5、参考书说
      第一范式:如果关系模式R的每一个属性都是不可分解的,则R为第一范式模式
      第二范式:如果R是第一范式,且每个非码属性都完全函数依赖于码属性,则为第二范式
      第三范式:如果R是第二范式,且没有一个非码属性是传递函数依赖候选码,则为第三范式看不太懂,得看例子才行!高手能讲解一下就好了!  个人理解就是属性唯一,由多对多分解为一对多,参照 完整等!
       
      

  16.   

    5、参考书说 
        第一范式:如果关系模式R的每一个属性都是不可分解的,则R为第一范式模式 
        第二范式:如果R是第一范式,且每个非码属性都完全函数依赖于码属性,则为第二范式 
        第三范式:如果R是第二范式,且没有一个非码属性是传递函数依赖候选码,则为第三范式 
    ================================================
    还是英文书好..... - -#
      

  17.   

    字符串“open_door”   转换成   “OpenDoor”、”make_by_id”   转换成   ”MakeById”。 
    =======================
    不一定非要explode切割echo str_replace(' ','',ucwords(str_replace('_',' ','open_door')));
      

  18.   

    第6题我来做:
    SELECT CASE WHEN A>B THEN A Else B END,CASE WHEN B>C THEN B THEN C END
      

  19.   


    <?php
    /**
     * 第二题正则替换实现.
     *
     */
    function getString($eString = null)

    $eString = preg_replace(array("/(^[a-z]{1}|_[a-z]{1})/e",'/_/'),
    array("strtoupper('\\1')",''),
    $eString);
    return  $eString;
    }
    ?>
      

  20.   


    $arr1 = array (
            '0' => array ('fid' => 1, 'tid' => 1, 'name' => 'Name1' ),
            '1' => array ('fid' => 1, 'tid' => 2 , 'name' => 'Name2' ),
            '2' => array ('fid' => 1, 'tid' => 5 , 'name' => 'Name3' ),
            '3' => array ('fid' => 1, 'tid' => 7 , 'name' => 'Name4' ),
            '4' => array ('fid' => 3, 'tid' => 9, 'name' => 'Name5' )
            );
    $arr2 = array_chunk($arr1,4);
    print_r($arr2);
      

  21.   

    没有手册和ZDE,现在基本上写不出什么-___-!!
    这个我比较支持
      

  22.   

    $jack="10 2 36 14 10 25 23 85 99 45";
    $jack=explode(" ",$jack);
    $count=count($jack);
    for($i=0;$i<$count-1;$i++)
    for($j=$i+1;$j<$count;$j++)
    if($jack[$i]<$jack[$j]):
    $temp=$jack[$i];
    $jack[$i]=$jack[$j];
    $jack[$j]=$temp;
    endif;
    var_dump($jack);放个冒泡排序。
      

  23.   

    echo abs(strtotime("2007-2-1")-strtotime("2007-3-1"))/60/60/24 计算时间差