操纵字符串信息和正则表达式。 PHP

时间:2011-08-29 23:12:10

标签: php regex

我正在尝试检查表格中的特定值(购物车结帐),然后根据这些值显示提货日期。因此,如果我订购的产品具有圣诞节代码,则只会显示圣诞日历。或者,如果我订购圣诞节的东西,并且感谢客户将获得圣诞节和感恩节的日历。

这里是代码(我很确定我不会以正确的方式进行此操作。)我正试图绑定现有的购物车模板系统..所以我不能直接查询。

<?php
foreach($this->rows as $i => $row){

if(preg_match("/thanks/",$row->dates)) { $thanks ='thanks';}else {$thanks = '';}
if(preg_match("/xmas/",$row->dates)) { $xmas ='xmas';}else {$xmas = '';}
if(preg_match("/newyears/",$row->dates)) { $newyears ='newyears';}else {$newyears = '';}

$mydates=$thanks.$xmas.$newyears;


//print_r($mydates);

}

?>

<?php
if(preg_match("/xmas/",$mydates)) { ?>
<tr><td class="key">mylabel</td><td>myselect box</td></tr>
<?php }?><?php
<?php
if(preg_match("/thanks/",$mydates)) { ?>
<tr><td class="key">mylabel</td><td>myselect box</td></tr>
<?php }?>
<?php
if(preg_match("/newyears/",$mydates)) { ?>
<tr><td class="key">mylabel</td><td>myselect box</td></tr>
<?php }?>

print_r返回正确的值,但上面只显示购物车中项目的一个(第一个)选择。

说某人从圣诞节订购并感谢。然后print_r返回xmasthanks 如果他们订购感恩节print_r返回谢谢

html看起来像列中的普通选择框。它们应该像print_一样显示,但只显示购物车中的最后一个项目类型,所以如果你先订购一个圣诞节的东西,然后再点一个感谢,那么只有感恩节的选择才能显示。

1 个答案:

答案 0 :(得分:0)

嗯......这样的事情应该有用 - 我相信其他人有更简单更好的方法。尽量避免简单匹配的preg函数。 strstr甚至strpos似乎在这里工作得很好。

如果您不需要它来创建整个表,只需取出表的开始和结束行。 - 实际上,现在我想起来了,你可以轻松地将两个循环合二为一。

    <?php

    $datecodes = array();
    foreach($this->rows as $i => $row){

    if(strstr($row->dates, 'thanks')) { $datecodes[] = 'thanks';}
    if(strstr($row->dates, 'xmas')) { $datecodes[] = 'xmas';}
    if(strstr($row->dates, 'newyears')) { $datecodes[] = 'newyears'; }

    }




    if((is_array($datecodes)) && (count($datecodes) > 0)){

    $out .= '<table>';

    foreach($datecodes as $code){

      $out .= '<tr>';

        switch($code){

            case 'thanks':
                $out .= '<td class="key">Thanksgiving</td><td>';
                //Display Thanksgiving Calendar
                $out .= '</td>';
            break;

            case 'xmas':
                $out .= '<td class="key">Xmas</td><td>';
                //Display Xmas Calendar
                $out .= '</td>';
            break;

            case 'newyears':
                $out .= '<td class="key">New Years</td><td>';
                //Display New Years Calendar
                $out .= '</td>';
            break;
        }

      $out .= '</tr>';

    }

    $out .= '</table>';

    echo $out;
    }
    else{
    echo 'No Holiday Orders Found';

    }
?>