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

Здесь у меня есть переменная $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

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

4 ответа

Решение

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

$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;

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

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

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

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

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

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

$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;
Другие вопросы по тегам