V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ZiCraft
V2EX  ›  PHP

PHP 新手写了一段代码,求大佬帮忙看一下。

  •  
  •   ZiCraft · 2018-04-23 08:58:20 +08:00 · 4104 次点击
    这是一个创建于 2410 天前的主题,其中的信息可能已经有所发展或是发生改变。

    新手写了一段代码,自己都能感觉到太稚嫩而且逻辑有点乱,所以来求大佬给指点一下,帮助我开拓一下思维,)

    为了实现啥:

    代码是为了实现从数据库中读取文章的发布日期,比如如下的文章发布日期:

    2018 年 1 月 5 日,2018 年 1 月 7 日,2018 年 2 月 8 日,2019 年 3 月 5 日,2019 年 3 月 8 日

    然后根据这些日期的月份生成一些链接,分别链接到这个月份的文章汇总页面,比如如下的月份汇总:

    2018 年 1 月,2018 年 2 月,2019 年 3 月--按日期先后排序

    我的实现步骤:

    一、我首先从 MYSQL 中获取这些文章发布日期的数组,是 UNIX 日期戳格式的

    array(5) { [0]=> string(10) "1528416000" [1]=> string(10) "1524441600" [2]=> string(10) "1532044800" [3]=> string(10) "1524700800" [4]=> string(10) "1558224000"}

    二、转化成了可读的日期格式数组(只保留年份和月份)

    array(5) { [0]=> string(6) "201801" [1]=> string(6) "201801" [2]=> string(6) "201802" [3]=> string(6) "201903" [4]=> string(6) "201903"}

    三、判断上面数组中有哪些日期,然后生成“按月份归档的文章”链接。

    我的代码:

    
    get_col( $wpdb->prepare("SELECT meta_value FROM wp_postmeta WHERE meta_key = %s AND meta_value !=''",  'post_date'));    //第一步,获取到文章的发表日期 array ( wordpress )
    
    if(!empty($datecheck)){$humandate = array_map(function($item){return date("Ym", $item);},$datecheck);}    //第二步,转化成可读的日期数组
    
    $year = date('Y');    // 我本意是获取数据库里存在的文章年份(比如上面数组中存在的 2018 年、2019 年),可是不知如何实现,就暂时用这个来表示 2018 年,这样就导致最后只能处理 2018 年,不能处理 2019 年的文章归档,求大佬帮忙解惑,谢谢。
     
    $month = 1;   //从第一个月开始循环输出链接
    
    while($month<=12){
    if ($month >=10){
    $cdate = $year.$month;
    }else{$cdate = $year.'0'.$month;
    }    //为了和数组内的日期格式相同,所以年份和月份组合起来,两种情况,一种是 2018+10 = 201810,另一种是 2018+0+1 = 201801,不要笑我呆,菜鸟只能想到这样来处理了。
    
    if (in_array($cdate, $humandate)){
    echo ''.$year.'年'.$month.'月';
    }       //数组中存在这个日期的,就写出链接。
    
    $month++; 
    }
    ?>
    11 条回复    2018-04-23 12:32:54 +08:00
    mafeifan
        1
    mafeifan  
       2018-04-23 09:01:13 +08:00 via Android   ❤️ 1
    处理时间日期的话我都是用 carbon http://carbon.nesbot.com/
    hasbug
        2
    hasbug  
       2018-04-23 09:05:31 +08:00   ❤️ 1
    比较好奇你的头像是什么文件···
    singer
        3
    singer  
       2018-04-23 09:19:07 +08:00 via iPhone   ❤️ 1
    WordPress 直接看有相关功能的主题对应的代码就 ok 了
    zgx030030
        4
    zgx030030  
       2018-04-23 09:22:06 +08:00
    存在这个日期的就显示链接,不存在的也没显示,那你这个循环加 if 的组合和直接遍历数据库结果有什么区别?
    zjqzxc
        5
    zjqzxc  
       2018-04-23 09:33:23 +08:00   ❤️ 1
    既然已经拿到 unix 时间戳(和文章 id )了,可以构造要一个二维数组。
    $arr[年][月]=["文章 id1","文章 id2"]

    输出时候直接遍历这个数组即可
    solupro
        6
    solupro  
       2018-04-23 09:37:21 +08:00   ❤️ 1
    为啥文章不加个月份字段加索引一起存了呢?
    onion83
        7
    onion83  
       2018-04-23 09:48:10 +08:00   ❤️ 1
    mysql 相关的日期函数了解一下: https://my.oschina.net/u/1024107/blog/748344

    可以数据库直出结果.
    hellocy
        8
    hellocy  
       2018-04-23 11:23:55 +08:00   ❤️ 1
    wp_get_archives 函数了解一下
    <?php wp_get_archives( array( 'type' => 'monthly', 'limit' => 12 ) ); ?>
    按年按月显示格式都有参数指定的
    jhhhh
        9
    jhhhh  
       2018-04-23 11:49:33 +08:00   ❤️ 1
    代码风格不太好,看得累
    JohnChiu
        10
    JohnChiu  
       2018-04-23 12:15:52 +08:00   ❤️ 2
    @hasbug 目测是国家大数据专业委员会
    yytsjq
        11
    yytsjq  
       2018-04-23 12:32:54 +08:00   ❤️ 1
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5216 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 01:16 · PVG 09:16 · LAX 17:16 · JFK 20:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.