Здесь у меня есть переменная $ 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
Примечание: поскольку я использую некоторую сложную флексическую сетку, имплозия все еще делает немного сложным
Попробуй это:
$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;