search

Home  >  Q&A  >  body text

laravel - php,为什么要使用对象?不能用数组代替吗

就像是 laravel orm不也是能通过使用查询构造器完成的吗?

伊谢尔伦伊谢尔伦2804 days ago629

reply all(1)I'll reply

  • 天蓬老师

    天蓬老师2017-04-11 10:30:54

    PHP用数组保存SQL查询的结果集不很正常么?怎么会说不能用数组呢?
    PDO fetchAll返回的本来就是一个数组:
    $db->query('SELECT * FROM posts')->fetchAll(PDO::FETCH_ASSOC);
    PHP数组操作很灵活,可以干很多事,甚至是SQL里面的事,比如排序和分组:

    <?php
    //奥运奖牌榜,依次按金牌,银牌,铜牌的数目进行降序排序.
    header('Content-Type: text/plain; charset=utf-8');
    $arr = array(
        '中国' => array(
            '金牌' => 8,
            '银牌' => 3,
            '铜牌' => 6,
        ),
        '俄罗斯' => array(
            '金牌' => 3,
            '银牌' => 6,
            '铜牌' => 3,
        ),
        '美国' => array(
            '金牌' => 6,
            '银牌' => 8,
            '铜牌' => 8,
        ),
        '澳大利亚' => array(
            '金牌' => 4,
            '银牌' => 0,
            '铜牌' => 4,
        ),
        '意大利' => array(
            '金牌' => 3,
            '银牌' => 4,
            '铜牌' => 2,
        ),
    
    );
    
    // 实现 ORDER BY
    foreach($arr as $k => $v) {
        $sort['金牌'][$k] = $v['金牌'];
        $sort['银牌'][$k] = $v['银牌'];
        $sort['铜牌'][$k] = $v['铜牌'];
    }
    array_multisort(
        $sort['金牌'], SORT_DESC, 
        $sort['银牌'], SORT_DESC, 
        $sort['铜牌'], SORT_DESC, 
        $arr);
    var_export($arr);
    
    // 实现 GROUP BY (看看'金牌'字段都有哪些值)
    $tmp = array();
    foreach($arr as $k => $v) {
        if(in_array($v['金牌'], $tmp) === FALSE) {
            $tmp[] = $v['金牌'];
        }
    }
    var_export($tmp);

    reply
    0
  • Cancelreply