Как сделать так, чтобы труба соответствовала условиям

Здесь у меня есть переменная $ JSON объединены с возможными тремя условиями.

Согласно приведенным ниже условиям $ first, $ second и $ third, выходные данные должны быть объединены с pipe. Так что на выходе должно быть либо три, приведенные ниже

ожидаемый


first
or
first | second
or
first | second | third

Вот мой упрощенный кодекс:

<?php
$json = "";
$first = "1";
$second = "1";
$third = "1";
$pipe = "|";
if ($first == 1)
{
$json .= "first";
}
$json .= $pipe;
if ($second == 1)
{
$json .= "second";
}
$json .= $pipe;
if ($third == 1)
{
$json .= "third";
}
echo $json;
?>

Как я могу сделать переменную $ pipe, чтобы получить ожидаемый результат для переменной $ JSON

Примечание: поскольку я использую некоторую сложную флексическую сетку, имплозия все еще делает немного сложным

2

Решение

Попробуй это:

$json = "";
$first = "1";
$second = "1";
$third = "1";
$pipe = "|";
$data = array();
if ($first == 1)  $data[] = "first";
if ($second == 1) $data[] = "second";
if ($third == 1)  $data[] = "third";
$json = implode($pipe, $data);
echo $json;

Или используйте другой способ, например этот например.

3

Другие решения

Вы можете сделать это:

$array = array(
'first'  => $first,
'second' => $second,
'third'  => $third
);

echo implode($pipe, array_keys(array_filter($array)));

array_filter удаляет любую пару ключ / значение, значение которой ложно, array_keys возвращает массив их ключей, и implode объединяет значения с помощью $pipe,

2

Самое простое решение для этого — всегда соединять канал после конкатенации переменных.
Затем обрежьте окончательную строку на 1 символ. Если вы печатаете прямо на стандартный вывод, удалите эту последнюю трубу с комбинацией пробела и пробела.

0

$json;
$first = true;
$second = true;
$third = true;
$pipe = " | ";

if ($first === true) {
$json .= "first";
}
if ($second === true) {
$json .= $pipe . "second";
}
if ($third === true) {
$json .= $pipe . "third";
}
echo $json;
0