我爱自学

 找回密码
 会员注册

QQ登录

只需一步,快速开始

foreach发生preg_match() expects parameter 2 to be string, array given

php代码中使用foreach循环,网页测试时发生preg_match() expects parameter 2 to be string, array given报错。本文分享解决方法。

现象描述:我爱自学小编学习在thinkphp中引入phpspreadsheet第三方库,$data是从数据库中获取的数据,通过foreach循环将获取的数据值放置到Excel单元格中,程序运行时出现preg_match() expects parameter 2 to be string, array given报错。


$data = Inform::where([
                'status' =>-1
            ])
             ->order('id','desc')
             ->select();



foreach ($data as $rs) {
            // Add data
            $spreadsheet->getActiveSheet()
                ->setCellValue('A'.$i, $rs['id'])
                ->setCellValue('B'.$i, $rs['type'])
                ->setCellValue('C'.$i, $rs['category'])
                ->setCellValue('D'.$i, $rs['smalltype'])
                ->setCellValue('E'.$i, $rs['name'])
                ->setCellValue('F'.$i, $rs['url'])
                ->setCellValue('G'.$i, $rs['des']);
            $i++;
}


preg_match() expects parameter 2 to be string

preg_match() expects parameter 2 to be string


解决方法:

->了解报警含义

程序学习过程中,遇到报警的情况,应该先了解报警的含义。preg_match() expects parameter 2 to be string, array given  报错意思直白,preg_match期望第二个传入的参数是字符string,实际传入的是数组,因此报错。

->处理方法:

① 通过打断点的方式进行,注释到foreach中所有代码,发现没有报错
     发现->setCellValue('C'.$i, $rs['category'])这段代码生效时发生报错

② foreach中通过dump输出各个变量,发现确实$rs['category’]输出了数组。原因是在thinkphp模型中,对该字段设置了获取器。

preg_match() expects parameter 2 to be string

preg_match() expects parameter 2 to be string

③ 通过上面2个步骤,就知道问题了。解决起来就容易了,在输入了数组的地方,通过数组下标,输入字符串。



$i = 2;
        foreach ($data as $rs) {
            // Add data
            $spreadsheet->getActiveSheet()
                ->setCellValue('A'.$i, $rs['id'])
                ->setCellValue('B'.$i, $rs['type'])
                ->setCellValue('C'.$i, $rs['category']['text'])
                ->setCellValue('D'.$i, $rs['smalltype'] ? '成功' : '失败')
                ->setCellValue('E'.$i, $rs['name'])
                ->setCellValue('F'.$i, $rs['url'])
                ->setCellValue('G'.$i, $rs['des']);
            $i++;
}



** 注意事项:由于excel第一行已经被标题占用了,因此i=2,从第二行开始。
点击阅读更多内容!
如果您觉得文章内容帮助到了您,不妨点点感兴趣的广告。感谢您的支持!

微信扫一扫打赏

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

手机版|小黑屋|我爱自学 ( 蜀ICP备19015358号-3 )

GMT+8, 2024-4-26 13:43 , Processed in 0.117268 second(s), 34 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

本站大部分教程是网站原创教程,一部分教程为我爱自学(http://www.5izixue.com)编辑收集整理。

如果您需要转载我爱自学网站教程,请注明“资料来源:我爱自学(5izixue)”字样并注明本站网址。

编辑收集整理的教程版权归原作者所有,本站只提供网友交流学习使用,请勿用于商业用途,如果该文章有任何侵犯您权益的地方,请联系我们(569705694@qq.com),我们将在第一时间进行处理!谢谢您的支持!

快速回复 返回顶部 返回列表