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

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

  •  
  •   ZiCraft Apr 23, 2018 4548 views
    This topic created in 2940 days ago, the information mentioned may be changed or developed.

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

    为了实现啥:

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

    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 replies    2018-04-23 12:32:54 +08:00
    mafeifan
        1
    mafeifan  
       Apr 23, 2018 via Android   1
    处理时间日期的话我都是用 carbon http://carbon.nesbot.com/
    hasbug
        2
    hasbug  
       Apr 23, 2018   1
    比较好奇你的头像是什么文件
    singer
        3
    singer  
    PRO
       Apr 23, 2018 via iPhone   1
    WordPress 直接看有相关功能的主题对应的代码就 ok 了
    zgx030030
        4
    zgx030030  
       Apr 23, 2018
    存在这个日期的就显示链接,不存在的也没显示,那你这个循环加 if 的组合和直接遍历数据库结果有什么区别?
    zjqzxc
        5
    zjqzxc  
       Apr 23, 2018   1
    既然已经拿到 unix 时间戳(和文章 id )了,可以构造要一个二维数组。
    $arr[年][月]=["文章 id1","文章 id2"]

    输出时候直接遍历这个数组即可
    solu
        6
    solu  
       Apr 23, 2018   1
    为啥文章不加个月份字段加索引一起存了呢?
    onion83
        7
    onion83  
       Apr 23, 2018   1
    mysql 相关的日期函数了解一下: https://my.oschina.net/u/1024107/blog/748344

    可以数据库直出结果.
    hellocy
        8
    hellocy  
       Apr 23, 2018   1
    wp_get_archives 函数了解一下
    <?php wp_get_archives( array( 'type' => 'monthly', 'limit' => 12 ) ); ?>
    按年按月显示格式都有参数指定的
    jhhhh
        9
    jhhhh  
       Apr 23, 2018   1
    代码风格不太好,看得累
    JohnChiu
        10
    JohnChiu  
       Apr 23, 2018   2
    @hasbug 目测是国家大数据专业委员会
    yytsjq
        11
    yytsjq  
       Apr 23, 2018   1
    About     Help     Advertise     Blog     API     FAQ     Solana     1025 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 65ms UTC 22:10 PVG 06:10 LAX 15:10 JFK 18:10
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86