简体   繁体   中英

PHP - Don't repeat yourself?

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

Don't repeat yourself

I know of the "Don't repeat yourself". Still it's getting messy in some places. The code below contains three blocks of code.

They are similar in some ways and different in others. It don't follow the same pattern in all ways.

What it do

It creates an array that I loop out on the frontend.

Question

Are there any better ways to do this kind of stuff? Less messy, better structure?

    $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;

Here is an example for cleaning you code :

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;
}

I ended up using a clean array and prepare the variables before. It makes it more readable.

$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']
            ),

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM