PHP - 不要重复自己?

时间:2013-05-30 14:12:14

标签: php arrays if-statement design-patterns

http://plugins.trac.wordpress.org/browser/seo-content-helper/tags/1.1/get-data.php

不要重演

我知道“不要重复自己”。在某些地方,它仍然变得混乱。下面的代码包含三个代码块。

它们在某些方面类似,在其他方面则不同。它并没有在所有方面遵循相同的模式。

做什么

它创建了一个我在前端循环的数组。

问题

有没有更好的方法来做这种事情?不那么凌乱,结构更好?

    $message_start = '<strong>h2 tags</strong> - ';
    $message_end = '<span class="counter">' . $this->count_h2 . '</span>';
    if( $this->count_h2 == 0 ) {
        $message = 'No tags found. Add some!';
        $array['content_editor']['count_h2']['status'] = 2;
    } elseif( $this->count_h2 == 1 ) {
        $message = 'Some found. Too few!';
        $array['content_editor']['count_h2']['status'] = 1;
    } else {
        $message = 'Many found. Great!';
        $array['content_editor']['count_h2']['status'] = 0;
    }
    $array['content_editor']['count_h2']['message'] = $message_start . $message . $message_end;
    $array['content_editor']['count_h2']['count'] = $this->count_h2;

    $message_start = '<strong>h3-h6 tags</strong> - ';
    $h2_h6 = $this->count_h3 + $this->count_h4 + $this->count_h5 + $this->count_h6;
    $counter = ( $h2_h6 == 0 ) ? '' : $h2_h6;
    $message_end = '<span class="counter">' . $counter . '</span>';
    if( $h2_h6 == 0 ) {
        $message = 'No found. Add some!';
        $array['content_editor']['count_h3_h6']['status'] = 1;
    } else {
        $message = 'Found, great!';
        $array['content_editor']['count_h3_h6']['status'] = 0;
    }
    $array['content_editor']['count_h3_h6']['message'] = $message_start . $message . $message_end;
    $array['content_editor']['count_h3_h6']['count'] = $this->h2_h6;

    $message_start = '<strong>Title keywords</strong> - ';
    $counter = ( $this->found_keywords1_post_title == 0 ) ? '' : $this->found_keywords1_post_title;
    $message_end = '<span class="counter">' . $counter . '</span>';
    if( count( $this->keywords1 ) == 0 ) {
        $message = 'No primary added.';
        $array['content_editor']['missing_keywords1_post_title']['status'] = 2;
    } elseif( $this->found_keywords1_post_title == 0 ) {
        $message = 'No primary found.';
        $array['content_editor']['missing_keywords1_post_title']['status'] = 2;
    } else {
        $s = ( $this->found_keywords1_post_title != 1 ) ? 's' : '';
        $message = 'Primary found.';
        $array['content_editor']['missing_keywords1_post_title']['status'] = 0;
    }
    $array['content_editor']['missing_keywords1_post_title']['message'] = $message_start . $message . $message_end;
    $array['content_editor']['missing_keywords1_post_title']['count'] = $this->found_keywords1_post_title;

2 个答案:

答案 0 :(得分:2)

以下是清理代码的示例:

function pstrong($txt) {
    return "<strong>$txt</strong>";
} 

function pcounter($txt) {
    return '<span class="counter">' . $txt. '</span>';
}

$this->count_h1 = 1;
$this->h2_h6 = $this->count_h3 + $this->count_h4 + $this->count_h5 + $this->count_h6;
$array = array(
    'count_h2' => array(

        'title' => 'h2 tags',

        0 => array(
            'message' => 'No tags found. Add some!',
            'status' => 2
        ),

        1 => array(
            'message' => 'Some found. Too few!',
            'status' => 1
        ),

        'else' => array(
            'message' => 'Some found. Too few!',
            'status' => 0
        )
    ),

    'h2_h6' => array(
        'title' => 'h3-h6 tags',

        0 => array(
            'message' => 'No found. Add some!',
            'status' => 1
        ),


        'else' => array(
            'message' => 'Found, great!',
            'status' => 0
        )
    )
);

foreach($array as $key => $value) {

    $message = (!empty($value['title'][$index]) ? $value['title'][$index]['message'] : $value['title']['else']['message']);
    $array['content_editor'][$key][$index]['message'] = pstrong($value['title']) . $value['title'][$index]['message'] . pcounter($key);
    $array['content_editor'][$key][$index]['count'] = $this->$key;
}

答案 1 :(得分:0)

我最终使用了一个干净的数组并准备好变量。它使它更具可读性。

$array = array(
        'content_editor' => array(
            'count_h2' => array(
                'message_start' => 'h2 tags',
                'messages' => array(
                    0 => 'Many found. Great!',
                    1 => 'Some found. Too few!',
                    2 => 'No tags found. Add some!'
                ),
                'count' => $count_h2['count']
            ),
            'count_h3' => array(
                'message_start' => 'h3-h6 tags',
                'messages' => array(
                    0 => 'Found, great!',
                    1 => 'No tags found. Add some!'
                ),
                'count' => $count_h3['count']
            ),
            'missing_keywords1_post_title' => array(
                'status' => $missing_keywords1_post_title['status'],
                'message_start' => 'Title keywords',
                'messages' => array(
                    0 => 'Primary found!',
                    2 => 'No primary found!'
                ),
                'count' => $missing_keywords1_post_title['count']
            ),