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

请教一个关于“限时回复”的思路

  •  
  •   brando · 2013-06-07 16:34:46 +08:00 · 3891 次点击
    这是一个创建于 3969 天前的主题,其中的信息可能已经有所发展或是发生改变。
    内容是这样的,我发了一个站内消息给了某人,然后是要限时在24小时内回复,超过24小时,回复的按钮就变成了灰色。
    请教这个PHP的编写方式应该如何写?
    20 条回复    1970-01-01 08:00:00 +08:00
    raincious
        1
    raincious  
       2013-06-07 16:44:06 +08:00
    if ($postTime < time() - 3600 * 24) {
    $stype='可用色';
    } else {
    $stype='灰色';
    }
    raincious
        2
    raincious  
       2013-06-07 16:45:32 +08:00   ❤️ 2
    @raincious 啊,错了,真的不能边聊天边写程序,抱歉:

    if ($postTime > time() - 3600 * 24) {
    $style='可用色';
    } else {
    $style='灰色';
    }
    LionXen
        3
    LionXen  
       2013-06-07 21:24:52 +08:00
    判断站内信创建时间啊,如果超过24小时就控制按钮显示了。

    顺便求解一个问题,由于新注册无法发帖,问题比较急,所以搭车了。

    有两个数组,$a和$b,$a是原始内容,$b是正则匹配规则,我需要匹配出$a里的每个键值对,然后用$b的键组成一个新数组,代码结果如下

    $a = array(abc7,cbd4,def9) //待匹配内容

    $b = array("r1" => "/abc\d/","b2" => "/cbd\d/, "f5" => "/def\d/") //匹配规则

    最后匹配出的结果

    $c = array("r1" => "abc","b2" => "cbd","f5" => "def")

    求大神解答,语言是PHP
    LionXen
        4
    LionXen  
       2013-06-07 21:25:21 +08:00
    @raincious 求大神帮忙解决下我这个问题,谢谢
    Sunyanzi
        5
    Sunyanzi  
       2013-06-07 21:34:04 +08:00   ❤️ 1
    <?php
    $a = [ 'abc7', 'cbd4', 'def9' ];
    $b = [
    'r1' => '/abc\d/',
    'r2' => '/cbd\d/',
    'r3' => '/def\d/'
    ];
    $c = [];

    foreach( $a as $ia )
    foreach( $b as $ik => $ib )
    if ( preg_match( $ib, $ia, $ic ) ) $c[$ik] = $ic[0];

    print_r( $c );


    @LionXen 既然看到了就顺手写一下 ... 两次循环而已有什么难点么 ..?
    LionXen
        6
    LionXen  
       2013-06-07 21:46:24 +08:00
    @Sunyanzi 已跪,我是兴趣学php,对循环一类的一直都比较恼火,谢谢您的解答,可以使用
    raincious
        7
    raincious  
       2013-06-07 21:56:27 +08:00   ❤️ 1
    @Sunyanzi

    $b = [
    'r1' => '/abc\d/',
    'r2' => '/cbd\d/',
    'r3' => '/def\d/'
    ];

    我测试了@LionXen的正则表达式,发现不能匹配。修改成这样才能匹配:

    $b = array('r1' => '/abc/', 'b2' => '/cbd/', 'f5' => '/def/');

    测试代码:

    <?php

    $a = array('abc7', 'cbd4', 'def9');

    $b = array('r1' => '/abc/', 'b2' => '/cbd/', 'f5' => '/def/');

    $result = array(); // Store the result

    $iloop = 0; // Use to match corresponding element key in $a;

    $matches = array();

    foreach($b AS $key => $preg) {
    if (preg_match($preg, $a[$iloop++], $matches)) {
    $result[$key] = $matches[0];
    }
    }

    print_r($result);

    ?>
    lizheming
        8
    lizheming  
       2013-06-07 22:02:33 +08:00
    @Sunyanzi 又见Sunyanzi大大~_~
    LionXen
        9
    LionXen  
       2013-06-07 22:04:37 +08:00
    @raincious 感谢,这个正则只是例子,非常感谢^_^
    Sunyanzi
        10
    Sunyanzi  
       2013-06-07 22:11:20 +08:00   ❤️ 1
    @raincious 你的这种写法 ... 怎么说呢 ... 我改变一下 $a 的顺序不就挂了 ...

    以及 ... 正则没有任何问题 ..?

    <?php
    preg_match( '/abc\d/', 'abc2222', $foo );
    echo $foo[0];

    上面这段程序你无法得到 abc2 这个结果么 ..?
    raincious
        11
    raincious  
       2013-06-07 22:20:35 +08:00   ❤️ 1
    @Sunyanzi 那个只是测试代码。因为我在调试楼主的问题时发现没法匹配得到楼主的结果。

    然后拿你的例子代码算了下,结果是Array ( [r1] => abc7 [r2] => cbd4 [r3] => def9 )。就是说问题主正则里的\d基本没用。

    所以我就太奇怪了,于是才发了提问。preg_match( '/abc\d/', 'abc2222', $foo ); 的结果是abc2没错。

    现在的问题是,为什么问题主的正则里\d会没用?难道是我版本的问题?PHP 5.4.3。
    raincious
        12
    raincious  
       2013-06-07 22:22:07 +08:00   ❤️ 1
    @LionXen 额,原来如此。怪我没看题。
    Sunyanzi
        13
    Sunyanzi  
       2013-06-07 22:26:45 +08:00   ❤️ 1
    @raincious 我我 ... 我又一头雾水没明白了我 ... \d 怎么会没用 ..?

    abc2222 如果没有 \d 就只能匹配到 abc ... 只有有了 \d 才能匹配到 abc2 ...

    至于 @LionXen 描述的写法 ... 如果不改变他的正则的确无法得到没有 \d 的结果 ...

    但你可以发现他在原字符串的两边也没有加引号 ...

    所以我想 ... 那大概只是一个随手写的例子 ... 也许他在写那个问题的时候漏了吧 ..?
    raincious
        14
    raincious  
       2013-06-07 22:31:49 +08:00   ❤️ 1
    @Sunyanzi 嗯,确实是例子,我现在满脸黑线的看着问题主。

    我先看了他的$a和$b,然后看了他的结果。然后跟你一样写了两个循环,然后。。死活不能匹配,然后拆了循环一个个匹配,还是不行,然后刷新了页面,看到了你的帖子,代码原样贴上去,结果也跟楼主的结果不一样。

    然后我就猛然发现了个\d,删掉了,就正常得到结果了。然后我就把结果贴上来了。

    我决定洗洗睡了。
    brando
        15
    brando  
    OP
       2013-06-08 00:05:43 +08:00
    非常感謝@raincious
    LionXen
        16
    LionXen  
       2013-06-08 00:06:01 +08:00
    @raincious 哈哈,其实我问这个问题重点是怎么循环重组到一个新数组,我想把原来的规则搬过来,但是太长了不利于描述问题,于是随便写了个 哈哈
    PrideChung
        17
    PrideChung  
       2013-06-08 00:31:59 +08:00   ❤️ 1
    你应该在收到回信的HTTP请求的时候再去判断时间,而不是单纯的在输出页面的时候把按钮灰掉,要是打开回复页面的时候还没超过24小时,然后那个页面就挂着半天不动了,过了24小时后再回复怎么办。
    brando
        18
    brando  
    OP
       2013-06-08 08:11:06 +08:00
    谢谢@PrideChung 关于http的请求其实已经做了,因为当时考虑到要知道点击链接之后,判断是否已阅读,所以在点击的时候已经触发了http的请求了,并且会更新数据库。(嘻嘻,当然我自己不是什么程序员,真的要考虑很周到是不太可能滴...)
    最后感谢V2ex的回复者和查看的朋友们。
    buru
        19
    buru  
       2013-06-08 13:43:45 +08:00
    @LionXen
    @Livid
    新注册用户多久可以发贴呢?
    Livid
        20
    Livid  
    MOD
       2013-06-08 13:58:48 +08:00   ❤️ 1
    @buru 在 V2EX,新用户需要等待 3600 秒(一小时)才可以发帖。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   956 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 79ms · UTC 19:47 · PVG 03:47 · LAX 12:47 · JFK 15:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.