ecshop中,foreach遍历数据库中值,二维数组变一维数组

先把代码贴出来,大部分有注释
if ($_REQUEST['act'] == 'list') { 检查权限 admin_priv('fanli2'); /*
* $sp 售价
* $cp 成本价
* $cj 差价
* 计算冻结积分
* $frozenpay_points 个人冻结积分
* $zd 总冻结积分
* $fp 个人冻结消费积分
* $gp 商品总售价
* $cbp 成本总价
* $scj 所有商品差价
*/
if ($_POST['query'] and $_POST['start_time'] and $_POST['end_time']) {
//获取当天8点时间
$today = strtotime(date('Y-m-d', time()));

    //获取当天23:59:59  第二天八点
    $next = $today + 3600 * 24;

// 获得选择开始时间 $start_time = strtotime($_POST['start_time']); // 获得选择结束时间 $end_time = strtotime($_POST['end_time']);

// 获得user_id和order_id $sql = "select user_id, order_id from " . $ecs->table('order_info');

    $order = $db->getAll($sql);


    //获得总冻结积分
    $zd1 = "select sum(frozenpay_points) from" . $ecs->table('users');
    $zd = $db->getOne($zd1);


    // 获得当天商品售价总价
    $gp1 = "select sum(goods_price) from" . $ecs->table('order_goods') . "as a left join" . $ecs->table('order_info') . "as b on a.order_id = b.order_id where pay_time >= $start_time" . " AND pay_time <= $end_time";
    $gp = $db->getOne($gp1);
    //var_dump($gp);

    //获得当天成本价
    $cbp1 = "select sum(chengben_price) from" . $ecs->table('order_goods') . "as a left join" . $ecs->table('order_info') . "as b on a.order_id = b.order_id where pay_time >= $start_time" . " AND pay_time <= $end_time";
    $cbp = $db->getOne($cbp1);

// 获得个人冻结积分 $sql = "select sum(frozenpay_points) from " . $ecs->table('users'); $frozenpay_points = $db->getOne($sql);

// 获得差价 $scj = $gp - $cbp;

// 计算 $fan = ($frozenpay_points / $zd) * ($scj * 0.2);

    $desc = '公式二返利' . $fan . '时间' . date('Y-m-d', time());
    // var_dump($order);die;

    foreach ($order as $k => $v) {

// 查询logs中订单时间是否是今天
$sql = "select change_time , order_id from " . $ecs->table('logs') . "where order_id=" . $v['order_id'] . ' order by change_time desc'; $row = $db->getRow($sql);
//如果是今天说明返过了,如果不是,则执行下面内容
if ($row['change_time'] > $today and $row['change_time'] < $next) { echo "今天已经返过了"; die; } else {
// 查询所有的冻结积分
$sql = "select sum(frozenpay_points) from " . $ecs->table('users') . " where user_id=" . $v['user_id']; $user_frozenpay_points = $db->getOne($sql);

            if ($user_frozenpay_points > $fan) {

                $sql = "update ecs_users set frozenpay_points = frozenpay_points -" . $fan . " , pay_points = pay_points +" . $fan . " where user_id=" . $v['user_id'];

                $db->query($sql);

                $time = time();
                $sql = "insert into ecs_account_log (user_id,pay_points,change_time,change_desc) VALUES ($k,$fan,$time,'$desc')";


                $user_id = $v['user_id'];
                $order_id = $v['order_id'];

                $sql = "INSERT INTO `zhongren`.`ecs_logs`( `user_id`, `order_id`, `change_time`, `start`) VALUES ($user_id,  $order_id,$time,1)";

                $db->query($sql);


            }

        }
    }
}
$smarty->display('fanli2.htm');

这是这几天用ecshop开发一个商城返利的功能。本人是培训出来的,只能说基础不好,当时废了老大劲。现在把这个在简书上写一遍,巩固一下,如果能帮助到跟我一样的朋友,那今晚我没有白写。
有代码,第一次用markdown写东西。还不太习惯。望谅解。

  • 首先选择日期时候不能选择空日期
    if ($_POST['query'] and $_POST['start_time'] and $_POST['end_time']) {
    if做判断,很简单,不多说了
  • 获取当天时间和次日时间(本来想写12点呢,后来嫌麻烦没有写。所以我这个是获取的8点的时间。可以减去8个小时。)
    $today = strtotime(date('Y-m-d', time()));
    $next = $today + 3600 * 24;
  • 选择的开始时间和结束时间
    $end_time = strtotime($_POST['end_time']);
    $start_time = strtotime($_POST['start_time']);
    -接下来就是获取返利公式获取的值了,那些值都是从数据库中查出来的。简单的不写了,写出一个两表联查的代码吧
    $gp1 = "select sum(goods_price) from" . $ecs->table('order_goods') . "as a left join" . $ecs->table('order_info') . "as b on a.order_id = b.order_id where pay_time >= $start_time" . " AND pay_time <= $end_time";
    $gp = $db->getOne($gp1);

这里说下getOne和getAll还有getRow的区别:
getAll($sql)和getAllCached($sql, $cached = 'FILEFIRST'):获取所有记录。
getRow($sql, $limited = false)和getRowCached($sql, $cached = 'FILEFIRST'):获取单行记录。
getCol($sqlse)和getColCached($sql, $cached = 'FILEFIRST'):获取某栏位的所有值。
getOne($sql, $limited = false)和getOneCached($sql, $cached = 'FILEFIRST'):获取单个数值。
query($sql):执行数据库查询。
autoExecute($table, $field_values, $mode = 'INSERT', $where = ''):数据库表操作。

  • OK ,接下来就是重头戏了。搞得我将要崩溃的foreach遍历
    当时我写的时候数据库查出来后得到的是个二维数组,我就一心想把它变成一维数组,就是变成只有值的那种,然后写了老多臃肿的代码,获取每个值之后就便利出来。后来“大神”帮我看的时候,一眼看破天机,说我写的foreach都是无用的,等他帮我改好代码后我猜发现,原来还可以这样写。不愧是三年开发经验的大神。
    拿下面这段代码来说吧
    $sql = "select change_time , order_id from " . $ecs->table('logs') . "where order_id=" . $v['order_id'] . ' order by change_time desc';
    where条件order_id = "$v['order_id'];
    追本溯源,看一下$v哪里来的。是foreach($order $k=>$v)中的。那么$order呢?
    在这里
    $sql = "select user_id, order_id from " . $ecs->table('order_info'); $order = $db->getAll($sql);
    我来打印一下:
打印$order显示的数组.jpg

之前我费老大劲想把这个二维数组改成只有值的那种形式。呵呵,只能怪我太天真。费力不讨好。一直做无用功。

其实获取到了这些之后就可以了。想在后面foreach中的sql语句中用到的话,直接跟上面的sql语句一样用就好了。先获取这个二维数组,可以获取到想要的值之后啥都好说,然后就是$v[‘想要的字段’]这样写就好了。

这样显得即规整,显而易懂。代码执行率高,查询速度快。


以上只是我一个小白个人见解,如有不对之处还恳请指正。我定会虚心学习。谢谢大家。还有一个问题就是代码格式,有的在框里面,有的则是灰色的背景。这是怎么回事?请指教。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354

推荐阅读更多精彩内容