大公司的PHP面试题,大家来解决,送分啊! 这是PHP软件工程师的面试题,我自己太菜做对的没有几道,那职位工资相对都比较高,可惜啊,现在放上来给大家帮看看,自己也可以跟着学学,谢谢啊!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 第五题也许会决定薪资.第三范式要求已经比较低了,如果您能讲得很好,老板会赏识你的.Php开发用EA建模,因为Rose不支持Php代码生成.个人喜欢Runloader.版本控制当然也就SVN了.冒泡不会没搞过吧?流程的话,要看情况了,有时先建模,有时先狂写一气再说:)其它问题查查手册很快就能解决的.给分,谢谢…… <pre><?phpclass 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>好玩:) 还少了一题,,,现在加上,大家看看啊,,谢谢啦!! (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' ) )); $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; 先说说第三题吧,第三题可以用explode把_分开,然后用一个可以把头拼音变成大写的函数将其变成Open这样的,最后用implode连接就可以了。 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); 不知道这么搞第3题,行不行。。是他要的那个意思么?<?php $str="how_are_you!"; $expStr=explode("_",$str); for($i=0;$i<count($expStr);$i++) { echo ucwords($expStr[$i]); }?> 晕,刚看到,还要函数函数就成这个样子了 <?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!!")?> 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);也不知道对不对,哈哈 <?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?> 没有手册和ZDE,现在基本上写不出什么-___-!! 呵呵,楼主还是加分吧!这么好的题!不要吝啬啊!高手都不太愿做功课!俺查了一下手册,不 对的地方请指正!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) 这个效果不好,等高手其他方法 3、SysTem128 的答案近乎完美//$eString = 'open_door'; public function getString($eString = null) { $eString = explode('_',$eString); $eString = array_map("ucfirst",$eString); $eString = implode($eString,''); return $eString; } 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; } 5、参考书说 第一范式:如果关系模式R的每一个属性都是不可分解的,则R为第一范式模式 第二范式:如果R是第一范式,且每个非码属性都完全函数依赖于码属性,则为第二范式 第三范式:如果R是第二范式,且没有一个非码属性是传递函数依赖候选码,则为第三范式看不太懂,得看例子才行!高手能讲解一下就好了! 个人理解就是属性唯一,由多对多分解为一对多,参照 完整等! 5、参考书说 第一范式:如果关系模式R的每一个属性都是不可分解的,则R为第一范式模式 第二范式:如果R是第一范式,且每个非码属性都完全函数依赖于码属性,则为第二范式 第三范式:如果R是第二范式,且没有一个非码属性是传递函数依赖候选码,则为第三范式 ================================================还是英文书好..... - -# 字符串“open_door” 转换成 “OpenDoor”、”make_by_id” 转换成 ”MakeById”。 =======================不一定非要explode切割echo str_replace(' ','',ucwords(str_replace('_',' ','open_door'))); 第6题我来做:SELECT CASE WHEN A>B THEN A Else B END,CASE WHEN B>C THEN B THEN C END <?php/** * 第二题正则替换实现. * */function getString($eString = null){ $eString = preg_replace(array("/(^[a-z]{1}|_[a-z]{1})/e",'/_/'), array("strtoupper('\\1')",''), $eString); return $eString;}?> $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); 没有手册和ZDE,现在基本上写不出什么-___-!!这个我比较支持 $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);放个冒泡排序。 echo abs(strtotime("2007-2-1")-strtotime("2007-3-1"))/60/60/24 计算时间差 关于mysql的查询语句 natsort()排列json数据时报错。 php读取数据库内容保存到excel里 shell中的wget问题 表单问题、 2011年4月;用正则怎么写?????? smarty求助 这段话在html里有用,怎么在php中就不起作用了呢?请大家来看看! 今晚第5便提这个问题:: 要在收到的邮件中怎么显示发件人的油箱地址,这样的Mail函数怎么用 任何配置php,使得他能访问本机中的oracle js中类似confirm窗口和alert窗口中的按钮名可以自定义吗? 发现一个可以 10 倍提高开发效率的 MVC PHP 框架 - CodeIgniter
第三范式要求已经比较低了,如果您能讲得很好,老板会赏识你的.
Php开发用EA建模,因为Rose不支持Php代码生成.
个人喜欢Runloader.版本控制当然也就SVN了.冒泡不会没搞过吧?
流程的话,要看情况了,有时先建模,有时先狂写一气再说:)
其它问题查查手册很快就能解决的.
给分,谢谢……
<?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>好玩:)
(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' )
)
);
'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;
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);
$str="how_are_you!";
$expStr=explode("_",$str);
for($i=0;$i<count($expStr);$i++)
{
echo ucwords($expStr[$i]);
}
?>
函数就成这个样子了 <?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!!")?>
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);也不知道对不对,哈哈
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
?>
高手都不太愿做功课!俺查了一下手册,不 对的地方请指正!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)
这个效果不好,等高手其他方法
public function getString($eString = null)
{
$eString = explode('_',$eString);
$eString = array_map("ucfirst",$eString);
$eString = implode($eString,'');
return $eString;
}
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;
}
第一范式:如果关系模式R的每一个属性都是不可分解的,则R为第一范式模式
第二范式:如果R是第一范式,且每个非码属性都完全函数依赖于码属性,则为第二范式
第三范式:如果R是第二范式,且没有一个非码属性是传递函数依赖候选码,则为第三范式看不太懂,得看例子才行!高手能讲解一下就好了! 个人理解就是属性唯一,由多对多分解为一对多,参照 完整等!
第一范式:如果关系模式R的每一个属性都是不可分解的,则R为第一范式模式
第二范式:如果R是第一范式,且每个非码属性都完全函数依赖于码属性,则为第二范式
第三范式:如果R是第二范式,且没有一个非码属性是传递函数依赖候选码,则为第三范式
================================================
还是英文书好..... - -#
=======================
不一定非要explode切割echo str_replace(' ','',ucwords(str_replace('_',' ','open_door')));
SELECT CASE WHEN A>B THEN A Else B END,CASE WHEN B>C THEN B THEN C END
<?php
/**
* 第二题正则替换实现.
*
*/
function getString($eString = null)
{
$eString = preg_replace(array("/(^[a-z]{1}|_[a-z]{1})/e",'/_/'),
array("strtoupper('\\1')",''),
$eString);
return $eString;
}
?>
$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);
这个我比较支持
$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);放个冒泡排序。