首页 > 编程技术 > php

一道简单的PHP笔试题(进阶必备)

发布时间:2016-11-25 15:39

下文是一道简单的PHP笔试题(进阶必备)了,如果你准备去面试的话不防进入来参考这道笔试题吧。

次,一个前辈发了一道PHP笔试给我,题目大致如下

 代码如下 复制代码
$arr = array('1','2','3');
 
foreach($arr as $key=>&$val){}
 
foreach($arr as $key=>$val){}
 
var_dump($arr);

问答案是什么?

看完我就懵了?根本不知道问题的考点在那里,看完两个foreach的区别在一个是取了地址,一个没有取地址,,这样会影响结果吗?

结果输出的结果居然是

 代码如下 复制代码

array(
  0 => string '1' (length=1)
  1 => string '2' (length=1)
  2 => &string '2' (length=1)
)

表示打印出来的数据为什么会这样?“3”去哪儿了?
造成这样的原因在于:&取地址符合。

 

用这种方式来说明foreach对数组的读取,比较直观。

然后循环就是指针的移动读取,而且由于是&取值,则直接读的是地址而是不简单的赋值。所以当第一个循环结束后。$val跟$arr[2]指的是同一个地址,所以$val值如果改变了,$arr['2']值也跟着改变了。

如果,你运行一下如下代码

 代码如下 复制代码
$arr = array('1','2','3');
 
foreach($arr as $key=>&$val){}
 
foreach($arr as $key=>$val){
 var_dump($arr);
}
var_dump($arr);

你就能看到变化的过程。和得到之前结果的原因

 

PHPExcel是php的一个插件,它可以实现读取excel文件也就是xls文件了,下面我们就来看一个PHPExcel操作excel(xls)文件例子,希望能帮助到各位。

读取中文的xls、csv文件会有问题,网上找了下资料,发现PHPExcel类库好用,官网地址:http://phpexcel.codeplex.com/

1、读取xls文件内容

 代码如下 复制代码

<?php
    //向xls文件写入内容
    error_reporting(E_ALL);
    ini_set('display_errors', TRUE);   
    include 'Classes/PHPExcel.php';           
    include 'Classes/PHPExcel/IOFactory.php'; 
    //$data:xls文件内容正文
    //$title:xls文件内容标题
    //$filename:导出的文件名
    //$data和$title必须为utf-8码,否则会写入FALSE值
    function write_xls($data=array(), $title=array(), $filename='report'){
        $objPHPExcel = new PHPExcel();
        //设置文档属性,设置中文会产生乱码,待完善...
        // $objPHPExcel->getProperties()->setCreator("云舒")
                             // ->setLastModifiedBy("云舒")
                             // ->setTitle("产品URL导出")
                             // ->setSubject("产品URL导出")
                             // ->setDescription("产品URL导出")
                             // ->setKeywords("产品URL导出");
        $objPHPExcel->setActiveSheetIndex(0);
       
        $cols = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
        //设置www.111cn.net标题
        for($i=0,$length=count($title); $i<$length; $i++) {
            //echo $cols{$i}.'1';
            $objPHPExcel->getActiveSheet()->setCellValue($cols{$i}.'1', $title[$i]);
        }
        //设置标题样式
        $titleCount = count($title);
        $r = $cols{0}.'1';
        $c = $cols{$titleCount}.'1';
        $objPHPExcel->getActiveSheet()->getStyle("$r:$c")->applyFromArray(
            array(
                'font'    => array(
                    'bold'      => true
                ),
                'alignment' => array(
                    'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_RIGHT,
                ),
                'borders' => array(
                    'top'     => array(
                        'style' => PHPExcel_Style_Border::BORDER_THIN
                    )
                ),
                'fill' => array(
                    'type'       => PHPExcel_Style_Fill::FILL_GRADIENT_LINEAR,
                    'rotation'   => 90,
                    'startcolor' => array(
                        'argb' => 'FFA0A0A0'
                    ),
                    'endcolor'   => array(
                        'argb' => 'FFFFFFFF'
                    )
                )
            )
        );
       
        $i = 0;
        foreach($data as $d) {  //这里用foreach,支持关联数组和数字索引数组
            $j = 0;
            foreach($d as $v) {   //这里用foreach,支持关联数组和数字索引数组
                $objPHPExcel->getActiveSheet()->setCellValue($cols{$j}.($i+2), $v);
                $j++;
            }
       $i++;
        }
        // 生成2003excel格式的xls文件
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="'.$filename.'.xls"');
        header('Cache-Control: max-age=0');

        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
        $objWriter->save('php://output');
    }
    $array = array(
        array(1111,'名称','品牌','商品名','http://www.baidu.com'),
        array(1111,'名称','品牌','商品名','http://www.baidu.com'),
        array(1111,'名称','品牌','商品名','http://www.baidu.com'),
        array(1111,'名称','品牌','商品名','http://www.baidu.com'),
        array(1111,'名称','品牌','商品名','http://www.baidu.com'),
    );
    write_xls($array,array('商品id','供应商名称','品牌','商品名','URL'),'report');
   
?>

2、向xls文件写内容

 代码如下 复制代码
<?php
    //获取数据库数据(mysqli预处理学习)
    $config = array(
        'DB_TYPE'=>'mysql',
        'DB_HOST'=>'localhost',
        'DB_NAME'=>'test',
        'DB_USER'=>'root',
        'DB_PWD'=>'root',
        'DB_PORT'=>'3306',
    );
    function getProductIdByName($name) {
        global $config;
        $id = false;
       
        $mysqli = new mysqli($config['DB_HOST'], $config['DB_USER'], $config['DB_PWD'], $config['DB_NAME']);
        if(mysqli_connect_error()) {   //兼容 < php5.2.9 OO way:$mysqli->connect_error
            die("连接失败,错误码:".mysqli_connect_errno()."错误信息:".mysqli_connect_error());
        }
        //设置连接数据库的编码,不要忘了设置
        $mysqli->set_charset("gbk");
        //中文字符的编码要与数据库一致,若没设置,结果为null
        $name = iconv("utf-8", "gbk//IGNORE", $name);
        if($mysqli_stmt = $mysqli->prepare("select id from 137_product where name like ?")) {
            $mysqli_stmt->bind_param("s", $name);
            $mysqli_stmt->execute();
            $mysqli_stmt->bind_result($id);
            $mysqli_stmt->fetch();
            $mysqli_stmt->close();
        }
        $mysqli->close();
        return $id;   //得到的是gbk码(同数据库编码)
    }  
    $id = getProductIdByName('%伊奈卫浴伊奈分体座便器%');
    var_dump($id);
?>

OK...

php 获取文章内容的第一张图片方法非常的简单,我们最常用的是使用了正则了,下面与一聚教程小伙伴一起来看看吧。

以下是关于选取文章中第一张图片的代码:

 代码如下 复制代码

$obj=M("News");
$info=$obj->where('id=1')->find();
//方法1*********

$soContent = $info['content'];
$soImages = '~<img [^>]* />~';
preg_match_all( $soImages, $soContent, $thePics );
$allPics = count($thePics[0]);
preg_match('/<img.+src=\"?(.+\.(jpg|gif|bmp|bnp|png))\"?.+>/i',$thePics[0][0],$match);
dump($thePics);
if( $allPics> 0 ){
    echo "<img" width=100% src='".$match[1]."' title='".$match[1]."'>";//获取的图片名称
}
else {
    echo "没有图片";
}
//**************

$soContent = $info['content'];
$soImages = '~<img [^>]* />~';
preg_match_all( $soImages, $soContent, $thePics );
$allPics = count($thePics[0]);
dump($thePics);
if( $allPics> 0 ){
    echo $thePics[0][0]; //获取的整个Img属性
} else {
    echo "没有图片";
}
//**************

$soImages = '~<img [^>]* />~';
$str=$info['content'];
preg_match_all($soImages,$str,$ereg);//正则表达式把图片的整个都获取出来了
$img=$ereg[0][0];//图片
$p="#src=('|\")(.*)('|\")#isU";//正则表达式
preg_match_all ($p, $img, $img1);
   $img_path =$img1[2][0];//获取第一张图片路径
if(!$img_path){
    $img_path="images/nopic.jpg";
} //如果新闻中不存在图片,用默认的nopic.jpg替换 */
echo $img_path;
//*************88

$str=$info['content'];
preg_match_all("/<img.*\>/isU",$str,$ereg);//正则表达式把图片的整个都获取出来了
$img=$ereg[0][0];//图片
$p="#src=('|\")(.*)('|\")#isU";//正则表达式
preg_match_all ($p, $img, $img1);
   $img_path =$img1[2][0];//获取第一张图片路径
if(!$img_path){
    $img_path="images/nopic.jpg";
} //如果新闻中不存在图片,用默认的nopic.jpg替换 */
echo $img_path;

ZipArchive是php自带的一个压缩与解压缩函数了,今天理所当然的情况中使用new ZipArchive来创建zip文件时碰到提示Fatal error: Class ZipArchive not found in错误,下面一聚教程小伙伴就此问题来看看排除办法。

测试代码如下

 代码如下 复制代码

//PHP解压缩文件(zip)
function unzip_file($file, $destination){
$zip = new ZipArchive() ;
//打开压缩文件
if ($zip->open($file) !== TRUE) {
die ('Could not open archive');
}
//创建文件
$zip->extractTo($destination);
$zip->close();
echo '成功';
}
unzip_file("htdocs.zip","wenjianming");

执行时发现

Fatal error: Class 'ZipArchive' not found in E:wwwqqdown.php on line 63

看这个不是未定义了,所以小编百度搜索一下,如下如下解说

在Windows下的解决办法是:

1、在php.ini文件中,将extension=php_zip.dll前面的分号“;”去除;

重启Apache服务器,我们再试发现可以了

补充如果是linux系统参考下面方法

在Linux下没有php_zip.dll这个文件

需要重新编译一下php的zip模块。具体安装方法如下:

 代码如下 复制代码

cd /usr/src
wget http://pecl.php.net/get/zip
tar -zxvf zip
cd zip-1.x.x
phpize
./configure
make
sudo make instal

其中, 在最后使用make install命令的时候,可能需要用到root的权限,所以建议使用sudo来运行。安装完之后,屏幕上会提示zip.so的位置。然后将其记录下来,如:/usr/local/lib/php/extensions/zip.so。

2、使用root权限修改php.ini(通常可能会在/usr/local/lib/文件夹下,不过视当初安装php而定,可以通过phpinfo()来查看):

增加extension = /usr/local/lib/php/extensions/zip.so,然后同样在php.ini文件中,将 zlib.output_compression = Off 改为 zlib.output_compression = On ;

3、最后别忘了重启一下Apache:apachectl restart;

注意:关于网站有一些朋友说zlib.output_compression = Off 改为 zlib.output_compression = On ; 我在windows下没有操作在php.ini文件中也没有看到但这样确实是可以生成或解压文件哦。

我们在使用phpmyadmin时碰到提示 phpMyAdmin错误-无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装的处理方法 问题,下面来看看解决办法。


当登录 phpMyAdmin 出现错误提示“无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装。”。原因是退出phpMyAdmin的时候,没有点“退出”而退出,而是直接叉掉浏览器窗口,当再次登录phpMyAdmin的时候就会出现这个错误。

如果服务器是用的wdcp管理软件的话,直接SSH登录服务器,进入:

/www/wdlinux/tmp

把里面的sess开头的文件全部删除。

如果是其他系统就进入

PHP安装目录/tmp

删除sess开头的文件。

标签:[!--infotagslink--]

您可能感兴趣的文章: