如何在数组中的数字后忽略字母

时间:2014-02-13 21:42:05

标签: php arrays taxonomy alphanumeric non-alphanumeric

我目前正在使用此代码在分层分类中显示最终的子代。例如,标记为20世纪的帖子> 20世纪90年代> 1994年应该最终只显示1994年。

以下代码适用于大多数父/子组,但以0结尾且子级为0的代码除外。例如,20世纪> 20世纪90年代> 1990年产出1990年(而不是1990年)。

我认为问题是array()使用输出20xxxx,1990,1990x的字母数字方法。因此,认为最后的孩子是20世纪90年代(而非1990年)。

有没有办法忽略数组中的字母?或者是否有比array()更好的使用顺序?

  <?php

    $terms = get_the_terms( $post->ID, 'From' );

        if ( !empty( $terms ) ) {
            $output = array();
            foreach ( $terms as $term ){
                if( 0 != $term->parent )
                    $output[] = '<a href="' . get_term_link( $term ) .'">' . $term->name . '</a>';
            }

                if( count( $output ) )
                echo '<p><b>' . __('','From') . '</b> ' . end($output) . '</p>';
            }
    ?>

如果您需要,您也可以在这里预览我的网站:dev.jamesoclaire.com第一篇文章显示“2010s”,而不应该显示“2010”

2 个答案:

答案 0 :(得分:0)

您可以使用explode来展开由>分隔的每个项目,以将它们放入数组中。然后,您可以使用array_pop来获取数组的最后一项。

http://us3.php.net/array_pop

最后,如有必要,您可以过滤掉字符串中不希望包含的字符。

$string = '20th Century > 1990s > 1994';

// EXPLODE THE ITEMS AT THE GREATER THAN SIGN    
$timeline_items = explode('>', $string);

// POP THE LAST ITEM OFF OF THE ARRAY AND STORE IT IN A VARIABLE
$last_item = trim(array_pop($timeline_items));

要直接回答您的问题,您可以使用正则表达式删除任何非数字字符。

$string = preg_replace('/[^0-9 >]/i', '', $string);

但这可能无法满足您的需求。例如:

$string = '20th Century > 1990s > 1994';
$string = preg_replace('/[^0-9 >]/i', '', $string);
print $string;

会给你:

20 > 1990 > 1994

答案 1 :(得分:0)

一位朋友帮我意识到我不幸提出了错误的问题。我需要做的是在运行get_the_terms时选择正确的术语。由于我只想显示年份,因此我排除了任何长度不超过4个字符的$term->name

<?php
        $terms = get_the_terms( $post->ID, 'From' );
if ( !empty( $terms ) ) {
    foreach ( $terms as $term ){
        if( ( 0 != $term->parent ) and ( strlen($term->name) == 4 ) )
            $output = '<a href="' . get_term_link( $term ) .'">' . $term->name . '</a>';
    }

    if ( !empty( $output ) )
        echo '<p><b>' . __('','From') . '</b> ' . $output . '</p>';
}
?>