最新php面试题及答案

来源:互联网 发布:如何预防抑郁症 知乎 编辑:程序博客网 时间:2024/05/22 13:52
PHP,是英文超文本预处理语言Hypertext Preprocessor的缩写。PHP 是一种 HTML 内嵌式的语言,是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,被广泛地运用,以下是应届毕业生小编给大家整理提供的相关面试试题,快来阅读看看吧。

  php算法题 (共12题)

  (1)有一串数字1,2,3,4,5,6,组成一个随机数组,并且第3个位置不能为5,然后5,6不能连续。。

  (2)一个字符串$str="aaaabsfdsfavdchjs",找出第一个唯一存在的字符。

  (3)有一堆数字,12,65,110,2,3,55,79,10,45等很多数字并且没有重复的,

  要求是:输出第一个数是最大的,第二个数是最小的 ,第三个数是第二大,

  第四个数是第二小...一次类推

  (4)写一个函数,将一个字符串(如:1234567890),转换成(如1,234,567,890)每3位用逗号隔开的形式。

  (5)请写一个函数实现获取文件的后缀名 比如: abc.exe.jpg

  (6)使用PHP描述冒泡排序和快速排序算法,对象可以是一个数组

  (7)写一个二维数组排序算法函数,能够具有通用性,可以调用php内置函数

  (9)给出一个字符串如 “A journey of a thousand miles must begin with a single step.” ,通过 PHP 程序处理变成 “a journeY oF A thousanD mileS musT begiN witH A singlE steP.”

  [

  注意:

  1、每个单词最后的字符如果是大写就变成小写,如果是小写就变成大写。

  2、如果单词只有一个字母,则转换这个字母,如“A” 变成 “a”,“a”变成“A”。

  3、标点符号不用变化。

  ]

  1.将字符串转换成小写

  strtolower():

  2.将字符转成大写

  strtoupper():

  3.将字符串首字符转换成大写

  usfilst():

  4.将字符串每个单词的首字符转换成大写

  ucwords():

  所有字母变大写:strtoupper()

  所有字母变小写:strtolower()

  (10)请实现一个函数,输入一段文本,把文本解析到一个数组中,数组每行元素的key通过输入参数指定。函数原型:function ExplodeLines($text, $columnNames)

  (11)写个function,把数组$data=array(23,22,45,28); 的个位,十位分别拆分成如下新数组$data=array(2,3,2,2,4,5,2,8);

  (12)含折扣的退货算法。

  函数原型: function CalcRefundAmount($orderItems, $discountAmount, $refundItems)

  假设用户有一个订单,

  $orderItems = array(

  ‘ItemA’=>array(‘price’=>5.0, ‘quantity’=>2),

  ‘ItemB’=>array(‘price’=>20.0, ‘quantity’=>1),

  );

  订单中产品ItemA的单价是5.0,数量是2;产品ItemB的单价是20,数量是1;

  这个订单总价是 5.0 * 2 + 20.0 * 1 = 30。

  假设最终付款的时候,由于这个订单由于使用代金券,优惠了$discountAmount = 10.0 元的价格,用户实际支付了20元。退货的时候,每个产品的退货价格是按照付款折扣率计算的。如果用户退货需要退掉1个ItemA,那么实际退给用户的钱应该是

  (5.0 * 1) * (20.0/30.0) = 3.33 元(精确到2位小数)

  $refundItems是实际退货的数量。在$orderItems为上述取值,$discountAmount=10的时候

  样例1:$refundItems = array( array(‘ItemA’=>1) ) 表示退1个ItemA,函数返回3.33

  样例2:$refundItems = array( array(‘ItemA’=>2, ‘ItemB’=>1) ) 表示全退,函数返回20.00

  请编写能实现上述功能的函数。

  第一题答案

  //冒泡算法

  /*冒泡排序的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第1 个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再大于第2个数),将小数放前,大数放后,一直比较到最小数前的一对相邻数,将小数放前,大数放后,第二趟结束,在倒数第二个数中得到一个新的最小数。如此下去,直至最终完成排序。

  由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。

  用二重循环实现,外循环变量设为i,内循环变量设为j。外循环重复9次,内循环依次重复 9,8,…,1次。每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a[j]和a[j+1]标识,i的值依次为1,2,…,9,对于每一个i, j的值依次为1,2,…10-i。 */

  $arr = array(345,4,17,6,52,16,58,69,32,8,234);

  for($i=1;$i

  for($j=count($arr)-1;$j>=$i;$j--){

  if($arr[$j]<$arr[$j-1]){

  $temp = $arr[$j-1];

  $arr[$j-1] = $arr[$j];

  $arr[$j] = $temp;

  }

  }

  }

  print_r($arr);

  //生成随机数组

  // $arr1 = array();

  // for($k=0;$k<6;$k++)

  // {

  // $g = rand(1,6);

  // while( in_array($g,$arr1) )

  // {

  // $g = rand(1,6);

  // }

  // $arr1[$k] = $g;

  // }

  $arr1 = array(1,2,3,4,5,6);

  shuffle($arr1); //将数组随机排序

  //利用冒泡算法实现第3个位置不能为5,然后5,6不能连续

  for($n=1;$n

  {

  for($m=count($arr1)-1;$m>=$n;$m--)

  {

  if($arr1[$m] ==5)

  {

  if($arr1[$m-1] == 6)

  {

  if($m == 1)

  {

  $a = $arr1[$m+2];

  $arr1[$m+2] = $arr1[$m-1] ;

  $arr1[$m-1] = $a;

  }

  else

  {

  $a = $arr1[$m-2];

  $arr1[$m-2] = $arr1[$m-1] ;

  $arr1[$m-1] = $a;

  }

  }

  }

  if($arr1[$m] ==6)

  {

  if($arr1[$m-1] == 5)

  {

  if($m==1)

  {

  $a = $arr1[$m+2];

  $arr1[$m+2] = $arr1[$m-1] ;

  $arr1[$m-1] = $a;

  }

  else

  {

  $a = $arr1[$m-2];

  $arr1[$m-2] = $arr1[$m-1] ;

  $arr1[$m-1] = $a;

  }

  }

  }

  if($arr1[2] == 5)

  {

  $c = $arr1[3];

  $arr1[3] = $arr1[2];

  $arr1[2] = $c;

  }

  }

  }

  print_r($arr1);

  第二题答案

  /*str_split() 函数把字符串分割到数组中。

  语法 str_split(string,length);

  string 必需。规定要分割的字符串。

  length 可选。规定每个数组元素的长度。默认是 1。

  array_count_values() 函数用于统计数组中所有值出现的次数。

  本函数返回一个数组,其元素的键名是原数组的值,键值是该值在原数组中出现的次数。

  语法 array_count_values(array);

  array 必需。规定输入的数组。

  $a=array("Cat","Dog","Horse","Dog");

  print_r(array_count_values($a));

  ?>

  输出:Array ( [Cat] => 1 [Dog] => 2 [Horse] => 1 )

  array_search() 函数与 in_array() 一样,在数组中查找一个键值。

  语法 array_search(value,array,strict)

  value 必需。规定在数组中搜索的值。

  array 必需。被搜索的数组。

  strict 可选。可能的值: true false - 默认

  如果值设置为 true,还将在数组中检查给定值的类型。

  $a=array("a"=>"Dog","b"=>"Cat","c"=>"Horse");

  echo array_search("Dog",$a);

  ?>

  输出:a*/

  $str = "aaaabsfdsfavdchjs";

  $arr = str_split($str);

  $c = array_count_values($arr);

  echo array_search('1', $c);

  第三题答案

  $testarr= array(12,65,110,2,3,55,79,10,45,200);

  sort($testarr); //sort() 函数按升序对给定数组的值排序。

  $count=0;

  $issingle = count($testarr) % 2 ;

  foreach($testarr as $key => $value ){

  $result[] = $testarr[count($testarr)-1-$count];

  if($issingle && $count+1 > ceil(count($testarr)/2)-1)break; //ceil() 函数向上舍入为最接近的整数

  $result[] = $testarr[$count];

  $count++;

  if(!$issingle && $count+1 > ceil(count($testarr)/2))break;

  }

  print_r($result);

  第四题答案

  /*number_format() 函数通过千位分组来格式化数字。

  语法number_format(number,decimals,decimalpoint,separator)

  number 必需。要格式化的数字。

  如果未设置其他参数,则数字会被格式化为不带小数点且以逗号 (,) 作为分隔符。

  decimals 可选。规定多少个小数。如果设置了该参数,则使用点号 (.) 作为小数点来格式化数字。

  decimalpoint 可选。规定用作小数点的字符串。

  separator 可选。规定用作千位分隔符的字符串。仅使用该参数的第一个字符。比如 "xyz" 仅输出 "x"。

  注释:如果设置了该参数,那么所有其他参数都是必需的。

  echo number_format("1000000");

  echo number_format("1000000",2);

  echo number_format("1000000",2,",",".");

  ?>

  输出:

  1,000,000

  1,000,000.00

  1.000.000,00*/

  echo number_format('1234567890'),"

  ";

  第五题答案

  /*

  explode() 函数把字符串分割为数组。

  语法explode(separator,string,limit)

  separator 必需。规定在哪里分割字符串。

  string 必需。要分割的字符串。

  limit 可选。规定所返回的数组元素的最大数目。

  $str = "Hello world. It's a beautiful day.";

  print_r (explode(" ",$str));

  ?>

  输出:

  Array

  (

  [0] => Hello

  [1] => world.

  [2] => It's

  [3] => a

  [4] => beautiful

  [5] => day.

  )

  */

  $file_name = "abc.exe.jpg";

  function extend_3($file_name)

  {

  $extend =explode("." , $file_name);

  $va=count($extend)-1;

  return '.'.$extend[$va];

  }

  echo extend_3($file_name);

  第六题答案

  //冒泡算法

  /*冒泡排序的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第1 个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再大于第2个数),将小数放前,大数放后,一直比较到最小数前的一对相邻数,将小数放前,大数放后,第二趟结束,在倒数第二个数中得到一个新的最小数。如此下去,直至最终完成排序。

  由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。

  用二重循环实现,外循环变量设为i,内循环变量设为j。外循环重复9次,内循环依次重复 9,8,…,1次。每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a[j]和a[j+1]标识,i的值依次为1,2,…,9,对于每一个i, j的值依次为1,2,…10-i。 */

  $arr = array(345,4,17,6,52,16,58,69,32,8,234);

  for($i=1;$i

  for($j=count($arr)-1;$j>=$i;$j--){

  if($arr[$j]<$arr[$j-1]){

  $temp = $arr[$j-1];

  $arr[$j-1] = $arr[$j];

  $arr[$j] = $temp;

  }

  }

  }

  print_r($arr);

  /*

  array_merge() 函数把两个或多个数组合并为一个数组。

  array_merge(array1,array2,array3...)

  $a1=array("a"=>"Horse","b"=>"Dog");

  $a2=array("c"=>"Cow","b"=>"Cat");

  print_r(array_merge($a1,$a2));

  ?>

  输出Array ( [a] => Horse [b] => Cat [c] => Cow )

  如果键名有重复,该键的键值为最后一个键名对应的值(后面的覆盖前面的)。如果数组是数字索引的,则键名会以连续方式重新索引。*/

  //快速排序法

  function quicksort($str){

  if(count($str)<=1) return $str;//如果个数不大于一,直接返回

  $key=$str[0];//取一个值,稍后用来比较;

  $left_arr=array();

  $right_arr=array();

  for($i=1;$i

  if($str[$i]<=$key)

  $left_arr[]=$str[$i];

  else

  $right_arr[]=$str[$i];

  }

  $left_arr=quicksort($left_arr);//进行递归;

  $right_arr=quicksort($right_arr);

  return array_merge($left_arr,array($key),$right_arr);//将左中右的值合并成一个数组;

  }//以下是测试

  $str=array(5,3,8,2,5,9,7,2,1,4,0);

  print_r(quicksort($str));

  第七题答案

  //二维数组排序,

  //$source_array是数据,

  //$key_word是排序的健值,

  //$order是排序规则:0是升序,1是降序

  function array_sort($source_array, $key_word, $order=0)

  {

  if (!is_array($source_array))

  return false;

  $keysvalue = array();

  foreach($source_array as $key => $val)

  {

  $keysvalue[$key] = $val[$key_word];

  }

  if($order == 0)

  {

  asort($keysvalue);

  }

  else

  {

  arsort($keysvalue);

  }

  reset($keysvalue);

  foreach($keysvalue as $key => $vals)

  {

  $keysort[$key] = $key;

  }

  $new_array = array();

  foreach($keysort as $key => $val)

  {

  $new_array[$key] = $source_array[$val];

  }

  return $new_array;

  }

  $source_array = array(31=>array('id'=>10001, 'name'=>'allen'),

  7=>array('id'=>10020, 'name'=>'bbb'),

  13=>array('id'=>10013, 'name'=>'fff'),

  45=>array('id'=>10024, 'name'=>'dddd'),

  65=>array('id'=>10076, 'name'=>'gggg'),

  12=>array('id'=>10047, 'name'=>'jjjj'),

  23=>array('id'=>10058, 'name'=>'hhh'),

  43=>array('id'=>10039, 'name'=>'kkkkk'),

  56=>array('id'=>10011, 'name'=>'iiiiii'));

  $result = array_sort($source_array, 'id', 0);

  print_r($result);

  ?>