Вы хотите просмотреть массив переменных, отобразить их, если они существуют, а затем разделить их запятой - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть 4 точки данных, которые могут существовать для определенного элемента.Существующий определяется как имеющий значение «Y».Вот 4 вещи:

INST_UNIV
INST_4YEAR
INST_2YEAR
INST_VOTECH

То, что я хотел бы сделать, это циклически проходить через них, и если каждая из них имеет значение «Y», отображать связанный текстовый всплеск.Наконец, если число больше 1, я бы хотел, чтобы они были разделены запятыми с "или" перед последним элементом.Вот беспорядок кода, с которым я играл.Это работает, но поскольку массив жестко закодирован, даже если одна из переменных возвращает пустое значение, запятая по-прежнему отображается.Любая помощь приветствуется.

<li>
Must attend: 
  @php
    $univ = ( $instance->applicationCharacteristics->first()->INST_UNIV == 'Y')? "a university" : "";
    $fourYear = ( $instance->applicationCharacteristics->first()->INST_4YEAR == 'Y')? "a four-year college" : "";
    $twoYear = ( $instance->applicationCharacteristics->first()->INST_2YEAR == 'Y')? " two-year college" : "";
    $voTech = ( $instance->applicationCharacteristics->first()->INST_VOTECH == 'Y')? "a vocational-tech school" : "";
    $items = array("$univ", "$fourYear", "$twoYear", "$voTech");
    $items[count($items) - 1] = "or " . $items[count($items) - 1];
    $items_string = implode(", ", $items );
    echo $items_string;
  @endphp
</li>

Ответы [ 3 ]

0 голосов
/ 14 сентября 2018

Попробуйте что-нибудь подобное.Он только помещает значения в массив $items, если они должны быть там.Затем он вставляет первую часть массива с разделителями-запятыми и добавляет " or " перед последним элементом.

$items = array();
if ( $instance->applicationCharacteristics->first()->INST_UNIV == 'Y') $items[] = "a university";
if ( $instance->applicationCharacteristics->first()->INST_4YEAR == 'Y') $items[] = "a four-year college";
if ( $instance->applicationCharacteristics->first()->INST_2YEAR == 'Y') $items[] = "two-year college";
if ( $instance->applicationCharacteristics->first()->INST_VOTECH == 'Y') $items[] = "a vocational-tech school";
if (count($items) > 1)
    $items_string = implode(', ', array_slice($items, 0, -1)) . " or " . $items[count($items)-1];
else
    $items_string = $items[0];
echo $items_string;  
0 голосов
/ 14 сентября 2018

Вы можете немного обработать массивы и объединить их, используя условное выражение:

$univ = ( $instance->applicationCharacteristics->first()->INST_UNIV == 'Y')? "a university" : "";
$fourYear = ( $instance->applicationCharacteristics->first()->INST_4YEAR == 'Y')? "a four-year college" : "";
$twoYear = ( $instance->applicationCharacteristics->first()->INST_2YEAR == 'Y')? " two-year college" : "";
$voTech = ( $instance->applicationCharacteristics->first()->INST_VOTECH == 'Y')? "a vocational-tech school" : "";
$items = array("$univ", "$fourYear", "$twoYear", "$voTech");
$items = array_filter($items); // remove empty arrays
$or = count($items) > 1 ? ' or ' : ''; // only add 'or' if items is more than one
$last_item = array_pop($items); // get the last items
$items_string = implode(", ", $items ) . $or . $last_item;
echo $items_string;
0 голосов
/ 14 сентября 2018

Просто используйте функцию substr, чтобы удалить последние "," удалив два последних символа:

$items_string = substr(implode(", ", $items ),0,-2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...