2012-03-29 5 views
1

Я бы очень признателен за любую помощь в этом. В принципе, я хочу создать массив списков из других массивов, чтобы обойти ограничения функции do_shortcode wordpress. Я делаю это, используя ряд функций.Возврат неупорядоченного содержимого списка из функции PHP

LONG VERSION ЗАДАЧИ:

в настоящее время код выглядит следующим образом:

/* These are the functions contained in a functions file */ 

    function output_entry_data() { 
    $postdate = get_the_date('j/n/y'); 
    $entrytitle = get_the_title(); 

return ('<li><p class="postmeta">'. $postdate. '</p><h3>'. $entrytitle. '</h3></li>'); 
    } 



    function output_month_data($entrynomax = '', $month = '', $entrydata = '') { 
    $entryno = 1; 

    while($entryno <= $entrynomax) { 
    echo $entrydata[$entryno]; 
    $entryno++; 
    } 

    } 


    function output_year_data($monthlynomax = '', $year = '', $monthlydata = '') { 
    $monthno = 1; 

    while($monthno <= $monthnomax) { 
    echo do_shortcode('<h4>[slider title="'. $month. '"]</h4><ul>'. $monthlydata[$monthno]. '</ul>[/slider]'); 
    $monthno++; 
    } 

    } 

    /* This is from a loop that determines whether you have reached the end of a month or a year */ 

    $entrydata[$entryno] = output_entry_data(); 
    $entrynomax = $entryno; 

    $monthlydata = array($monthno => $monthno); 
    $monthlydata[$monthno] = return(output_month_data($entrynomax, $month, $entrydata)); 
    $monthlynomax = $monthno; 

    $annualdata[$yearno] = array($yearno => $yearno); 
    $annualdata[$yearno] = return(output_year_data($monthlynomax, $year, $monthlydata)); 

    $entryno = 1; 
    $monthno = 1; 
    $yearno++; 
    $yearo = get_the_date('Y'); 

    /* The idea is that all the data gets outputted at the end of the loop like this: */ 

    $yearnomax = $yearno; 

    echo ('<ul>'); 

    $yearno = 1; 

    if($yearno <= $yearnomax) { 
    echo do_shortcode('<h3>[expand title ="'. $year. '"]</h3><ul>'. $annualdata[$yearno]. '</ul>[/expand]'); 
    $yearno++; 
    } 

    echo('</ul>'); 

На данный момент код успешного создания $ entrydata [$ entryno] массив, так как функция output_entry_data() просто возвращает строку кода каждый раз.

Однако, когда я пытаюсь создать массив $ monthdata [$ monthno] за каждый месяц, он просто запускает функцию output_month_data() и делает большой список всех ежемесячных записей, вместо того, чтобы передавать данные в массив для использования другими функциями.

я могу видеть, что это происходит потому, что я использовал «возвращение» в output_entry_data() и «эхо» в output_month_data()

укороченная версия ПРОБЛЕМА

Каждый элемент в массиве $ entrydata [$ entryno] - это строка, содержащая тег элемента списка, я хочу, чтобы output_monthly_data() возвращал одну большую строку из всех элементов в $ entrydata [$ entryno], которые будут использоваться другими функциями, а не эхо их в качестве кода в настоящее время. Можно ли это сделать, когда есть цикл while?

Большое спасибо, я буду благодарен за любые вводные данные здесь.

ответ

0

Да, это (легко) возможно. Есть по крайней мере два способа

  1. Соединить строки и возвращает полученную строку:

    function output_month_data($entrynomax = '', $month = '', $entrydata = '') { 
        $entryno = 1; 
    
        $return = ''; 
        while($entryno <= $entrynomax) { 
        $return .= $entrydata[$entryno]; # concatenate strings 
        $entryno++; 
        } 
    
        return $return; 
    } 
    
  2. хранения результатов в массиве и использовать implode возвращает строку, содержащую все элементы:

    function output_month_data($entrynomax = '', $month = '', $entrydata = '') { 
        $entryno = 1; 
    
        $return = array(); 
        while($entryno <= $entrynomax) { 
        $return[] = $entrydata[$entryno]; # append to array 
        $entryno++; 
        } 
    
        return implode('', $return); # change '' to any glue you want 
    }