Оператор If else для идентификации последнего члена в массиве
У меня есть приведенный ниже код для перечисления массива terms
, я помещаю запятую между терминами, если для сообщения назначено более одного term
.
$terms = get_terms('my_term', $args);
if (!empty($terms) && !is_wp_error($terms)) {
$count = count($terms);
$i = 0;
$term_list = '<span>';
foreach ($terms as $term) {
$i++;
$term_list .= '#<a href="' . esc_url(get_term_link($term)) . '"><span>' . $term->name . '</span></a>';
if ($count != $i) {
$term_list .= ', ';
} else {
$term_list .= '</span>';
}
}
}
Теперь я хотел бы поместить a &
между последними двумя терминами вместо a,
если есть более одного термина, назначенного на должность.
У вопроса есть решение - Посмотреть?

Этот вопрос будет улучшен с помощью выборочных данных и ожидаемого результата.
Источник

@miken32 IMHO вопрос абсолютно ясен
Источник

Каким должен быть ожидаемый результат, если в массиве есть только два элемента? Запятая или &?
Источник

Если есть только два термина, то должна быть запятая.
Источник
Ответы - Оператор If else для идентификации последнего члена в массиве / If else statement to identify the last term in the array

20.11.2019 07:48:00
Вы можете проверить$count
$i
.
$i = 1;
if ($count != $i) {
$term_list .= ', ';
} else if ($count == $i) {
$term_list .= '& ';
} else {
$term_list .= '</span>';
}

Если есть 3 условия, выход будет
term 1
и term 2
и term 3
. Я хотел иметь &
между последними двумя, как term 1
, term 2
и term 3

@короля вы правы, проверьте мой обновленный ответ. Изменение $i = 1 исправит это.

Теперь у меня есть
&
между последними двумя терминами, но у меня есть,
после последнего термина, как этот term 1
, term 2
и term 3
, нам это не нужно,
после последнего термина.


20.11.2019 08:05:13
Проверьте$count
$i + 1
:
if ($count != $i) {
if ($count == $i + 1)
$term_list .= '& ';
else
$term_list .= ', ';
} else {
$term_list .= '</span>';
}
Это должно сработать.
Является ответом!

20.11.2019 08:24:43
Я думаю, что это проще решить с помощью массива.
$terms = get_terms('my_term', $args);
if (!empty($terms) && !is_wp_error($terms)) {
$term_array = [];
foreach ($terms as $term) {
$term_array[] = '#<a href="' . esc_url(get_term_link($term)) . '"><span>' . $term->name . '</span></a>';
}
if(count($term_array) > 1){
$last = array_pop($term_array);
$term_list = '<span>' . implode(', ', $term_array) . '</span>';
$term_list .= ' & ' . $last;
} else {
$term_list = '<span>' . $term_array[0] . '</span>';
}
}
ОПЕРАЦИОННАЯ:
$terms = get_terms('my_term', $args);
if (!empty($terms) && !is_wp_error($terms)) {
$count = count($terms);
$i = 1;
$term_list = '<span>';
foreach ($terms as $term) {
$term_list .= '#<a href="' . esc_url(get_term_link($term)) . '"><span>' . $term->name . '</span></a>';
if($i !== $count){
if($i === $count - 1){
$term_list .= ' & ';
} else {
$term_list .= ', ';
}
}
$i++;
}
$term_list .= '</span>';
}

Предупреждение: count (): параметр должен быть массивом или объектом, реализующим функцию Countable
if (count($term) > 1) {

Извините, должен быть count ($term_array) там.

Спасибо. Оба примера сработали.

20.11.2019 09:18:47
Найдите последний элемент массива, затем просто проверьте каждый элемент в вашем цикле против lastelement, а затем сделайте свою "магию";). Пример:
$array = array('a' => 1,'b' => 2,'c' => 3);
$lastElement = end($array);
foreach($array as $k => $v) {
echo $v . '<br/>';
if($v == $lastElement) {
// 'Now you know that $v is the last element, do something';
}
}
Помочь в развитии проекта: