Вернуть неупорядоченное содержимое списка из функции PHP
Я очень ценю чью-либо помощь в этом. По сути, я хочу создать массив списков, сделанных из других массивов, чтобы обойти ограничения функции dopress в wordpress. Я делаю это с помощью ряда функций.
ДЛИННАЯ ВЕРСИЯ ПРОБЛЕМЫ:
Код в настоящее время выглядит так:
/* 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() и создает большой список всех записей за месяц, а не передает данные в массив, который будет использоваться другие функции.
Я вижу, что это потому, что я использовал "return" в output_entry_data() и "echo" в output_month_data()
КРАТКАЯ ВЕРСИЯ ПРОБЛЕМЫ
Каждый элемент в массиве $entrydata[$entryno] является строкой, содержащей тег элемента списка, я хочу, чтобы output_monthly_data() возвращала одну большую строку из всех элементов в $entrydata[$entryno], которые будут использоваться другими функциями, а не повторить их, как код в настоящее время делает. Можно ли это сделать, когда задействован цикл while?
Большое спасибо, я был бы признателен за любой вклад здесь.
1 ответ
Да, это (легко) возможно. Есть как минимум два способа
Объединить строки и вернуть полученную строку:
function output_month_data($entrynomax = '', $month = '', $entrydata = '') { $entryno = 1; $return = ''; while($entryno <= $entrynomax) { $return .= $entrydata[$entryno]; # concatenate strings $entryno++; } return $return; }
Сохраните результаты в массиве и используйте
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 }