Оператор If else для идентификации последнего члена в массиве

Оператор If else для идентификации последнего члена в массиве

20.11.2019 07:39:56 Просмотров 42 Источник

У меня есть приведенный ниже код для перечисления массива 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,если есть более одного термина, назначенного на должность.

php
У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/58959315/if-else-statement-to-identify-the-last-term-in-the-array#comment104175919_58959315
Этот вопрос будет улучшен с помощью выборочных данных и ожидаемого результата.
https://stackoverflow.com/questions/58959315/if-else-statement-to-identify-the-last-term-in-the-array#comment104176008_58959315
@miken32 IMHO вопрос абсолютно ясен
https://stackoverflow.com/questions/58959315/if-else-statement-to-identify-the-last-term-in-the-array#comment104176480_58959315
Каким должен быть ожидаемый результат, если в массиве есть только два элемента? Запятая или &?
https://stackoverflow.com/questions/58959315/if-else-statement-to-identify-the-last-term-in-the-array#comment104176519_58959315
Если есть только два термина, то должна быть запятая.

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

Vladimir Sabo

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>';
}
https://stackoverflow.com/questions/58959315/if-else-statement-to-identify-the-last-term-in-the-array/58959469#comment104174462_58959469
Если есть 3 условия, выход будет term 1и term 2и term 3. Я хотел иметь &между последними двумя, как term 1, term 2и term 3
https://stackoverflow.com/questions/58959315/if-else-statement-to-identify-the-last-term-in-the-array/58959469#comment104175104_58959469
@короля вы правы, проверьте мой обновленный ответ. Изменение $i = 1 исправит это.
https://stackoverflow.com/questions/58959315/if-else-statement-to-identify-the-last-term-in-the-array/58959469#comment104175692_58959469
Теперь у меня есть &между последними двумя терминами, но у меня есть,после последнего термина, как этот term 1, term 2и term 3, нам это не нужно,после последнего термина.
https://stackoverflow.com/questions/58959315/if-else-statement-to-identify-the-last-term-in-the-array/58959469#comment104175820_58959469
Если у меня есть только один термин, у нас есть a,после термина, подобного этому term 1,
José A. Zapata

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

Это должно сработать.

Является ответом!
IndianCoding

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>';
}
https://stackoverflow.com/questions/58959315/if-else-statement-to-identify-the-last-term-in-the-array/58960090#comment104176140_58960090
Предупреждение: count (): параметр должен быть массивом или объектом, реализующим функцию Countable if (count($term) > 1) {
https://stackoverflow.com/questions/58959315/if-else-statement-to-identify-the-last-term-in-the-array/58960090#comment104176198_58960090
Извините, должен быть count ($term_array) там.
https://stackoverflow.com/questions/58959315/if-else-statement-to-identify-the-last-term-in-the-array/58960090#comment104176545_58960090
Спасибо. Оба примера сработали.
Eric Day

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

}

Закрыть X