php代码优化
应避免在php foreach里面进行sql查询 以下代码示例使用了laravel的操作数据库api,eloquent orm
foreach里面执行两次sql查询
// $datas 要返回的数据
foreach ($datas as $_v) {
// todo 在foreach中查询了两次 **time**: 290 ms(postman)$uid=$_v->uid;
$_v->user_name = User::find($uid)->username; // 1$_v->user_avatar = User::find($uid)->avatar; // 2
}foreach里面执行一次sql查询
foreach ($datas as $_v) {
// todo// 简单的优化使得两次sql查询变成一次// 在foreach中查询了一次 **time**: 230 ms(postman)$user= User::find($_v->uid)); // 1$_v->user_name =$user->username;
$_v->user_avatar =$user->avatar;
}将sql查询移到foreach外面
DouPHP模块化企业网站管理系统是一款轻量级企业网站管理系统,基于PHP+MYSQL架构的,包含“手机版”、“公众号管理模块”、“小程序”,可以使用它快速搭建一个企业网站。 DouPHP功能特色: (模块全部免费,一键安装) 功能性模块:防伪查询模块、投票模块、自定义表单模块、工单模块等、会员模块、订单模块、视频模块、下载模块、图片模块等; 企业官网模块:业务范围
立即学习“PHP免费学习笔记(深入)”;
上面两个方法都不可避免的在foreach里面执行了数据库查询 **应避免在foreach中执行sql查询** 此处我的做法是再加一层foreach+if来代替sql查询 // 本质上是将foreach中的查询移到外面
// $tmp_data_arr 是存储在foreach外面执行的数据库查询结果foreach ($tmp_data_arras$value) {
foreach ($datasas$_v) {
if ($_v->uid === $value['id']) { // **time**: 180 ms(postman)$_v->user_name = $value['username'];
$_v->user_avatar = $value['avatar'];
}
}
}小结
// 返回数据return$datas;
经过简单的优化:时间(ms):290 -> 230 -> 180
ps
postman是一款很好用的chrome调试restful api的插件<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>
以上就介绍了php 优化查询 foreach,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。










