一. 写出如下程序的输出结果
参考试题出处
1.基础
<?php
$str1 = null;
$str2 = false;
echo $str1==$str2 ? '相等' : '不相等';
$str3 = '';
$str4 = 0;
echo $str3==$str4 ? '相等' : '不相等';
$str5 = 0;
$str6 = '0';
echo $str5===$str6 ? '相等' : '不相等';
?>
正确答案:相等 相等 不相等
注:== 表示值相等 ===表示值与类型都必须一样
原因是在PHP中变量是以C语言的结构体来存储的,空字符串和NULL,false都是以值为0存储的,其中这个结构体有个zend_uchartype;这样的成员变量,他是用来保存变量的类型的,而空字符串的类型是string,NULL的类型是NULL,false是boolean。
所以空字符串(''),false,NULL和0是值相等而类型不一样!
2.输出值
$a1 = null;
$a2 = false;
$a3 = 0;
$a4 = '';
$a5 = '0';
$a6 = 'null';
$a7 = array();
$a8 = array(array());
echo '<br>';
echo empty($a1) ? 'true' : 'false';
echo '<br>';
echo empty($a2) ? 'true' : 'false';
echo '<br>';
echo empty($a3) ? 'true' : 'false';
echo '<br>';
echo empty($a4) ? 'true' : 'false';
echo '<br>';
echo empty($a5) ? 'true' : 'false';
echo '<br>';
echo empty($a6) ? 'true' : 'false';
echo '<br>';
echo empty($a7) ? 'true' : 'false';
echo '<br>';
echo empty($a8) ? 'true' : 'false';
正确答案:true
true
true
true
true
false
true
false
解释:$a1--$a5都是0 $a7是空数组
3.输出值
$test = 'aaaaaa';
$abc = & $test;
unset($test);
echo $abc;
正确答案:aaaaaa
解释:& $test; 只是建立了一个通道指向值存储的地方 unset只能撤销$test的通道,但是
对$abc没影响
4.输出值
$count = 5;
function get_count(){
static $count = 0;
return $count++;
}
echo $count;
++$count;
echo get_count();
echo get_count();
正确答案:501
解释:不用解释,局部变量,静态变量 后加
5.输出值
$GLOBALS['var1'] = 5;
$var2 = 1;
function get_value(){
global $var2;
$var1 = 0;
return $var2++;
}
get_value();//这里没有输出值 但是var2却在这里加了值
echo $var1;
echo $var2;
正确答案:52
解释:如上
6.使用五种以上方式获取一个文件的扩展名
1.substr strrchr
$filename = "phpddt.jpg";
echo substr(strrchr($filename,"."),1);
//strrchr() 函数(在php中)查找字符在指定字符串中从左面开始的最后一次出现的位置,如果成功,返回该字符以及其后面的字符,如果失败,则返回 NULL。
2.explode array_pop//删除数组的最后一个元素
$filename = "phpddt.jpg";
$arr = explode(".",$filename);
echo array_pop($arr); //输出删除的最后一个元素
3.pathinfo
$filename = "phpddt.jpg";
$info = pathinfo($filename);
echo $info['extension'];//输出扩展名
4.pathinfo
$filename = "phpddt.jpg";
echo pathinfo($filename,PATHINFO_EXTENSION);
5.substr //切割字符串 strrpos
$filename = "phpddt.jpg";
echo substr($filename,strrpos($filename,".")+1);
// strrpos() 函数查找字符串在另一字符串中最后一次出现的位置。
二、算法题
1.冒泡
function bubble_sort($array){
$count = count($array);
if ($count <= 0) return false;
for($i=0; $i<$count; $i++){
for($j=$i+1; $j<$count; $j++){
if ($array[$i] > $array[$j]){
$tmp = $array[$i];
$array[$i] = $array[$j];
$array[$j] = $tmp;
}
}
}
return $array;
}
2.快速 //思路:数组小于或等于一不用排序,取数组第一个和所有的值比较小于第一个的在归在左边数组$left_array 大于第一个的归于右边数组,两个数组递归主方法之后两边数据依次从小到大排列好,之后array_merge合并数组返回
function quick_sort($array) {
if (count($array) <= 1) return $array;
$key = $array[0];
$left_arr = array();
$right_arr = array();
for ($i=1; $i<count($array); $i++){
if ($array[$i] <= $key)
$left_arr[] = $array[$i];
else
$right_arr[] = $array[$i];
}
$left_arr = quick_sort($left_arr);
$right_arr = quick_sort($right_arr);
return array_merge($left_arr, array($key), $right_arr);
}
//array_merge 合并数组
三.二分法查找数组元素
1.非递归 数组已排好序,知道数组的键值 查到就返回,没查到返回-1
function binary(&$arr,$low,$top,$target){
while($low <= $top){
//由于php取商是有小数的,所以向下取整,不过也可不加,数组也会取整
$mid = floor(($low+$top)/2);
echo $mid."<br>";
if($arr[$mid]==$target){
return $arr[$mid];
}elseif($arr[$mid]<$target){
$low = $mid+1;
}else{
$top = $mid-1;
}
}
return -1;
}
$arr = [1,4,7,12,34,45];
$rest = binary($arr,0,6,12);
print_r($rest);exit;
2.递归
function bin_sch($array, $low, $high, $k){
if ($low <= $high){
$mid = intval(($low+$high)/2);
if ($array[$mid] == $k){
return $mid;
}elseif ($k < $array[$mid]){
return bin_sch($array, $low, $mid-1, $k);
}else{
return bin_sch($array, $mid+1, $high, $k);
}
}
return -1;
}
$arr = [1,4,7,12,34,45];
$rest = binary($arr,0,6,12);
print_r($rest);exit;
四.写一个二维数组排序算法函数,能够具有通用性,可以调用php内置函数
//二维数组排序, $arr是数据,$keys是排序的健值,$order是排序规则,1是升序,0是降序
$data = array();
$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);
function array_sort($arr, $keys, $order=1) {
if (!is_array($arr)) {
return false;
}
$keysvalue = array();
foreach($arr as $key => $val) {
$keysvalue[$key] = $val[$keys];
}
if($order==0){
asort($keysvalue);
}else {
arsort($keysvalue);
}
$new_array = array();
foreach($keysvalue as $key=>$value) {
$new_array[$key] = $arr[$key];
}
return $new_array;
}
$rest = array_sort($data,'volume',0);
echo '<pre>';
print_r($rest);exit;
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。