PHP if - скрыть окружающий текст, если переменная данных пуста - PullRequest
0 голосов
/ 24 мая 2018

Я с тех пор несколько лет назад всегда хотел, чтобы мой фрагмент PHP был еще более полезным, а также использовать какое-то выражение IF.Но я нахожу это слишком сложным, и поэтому сегодня я заставил меня наконец попросить о помощи.

Так что мне нужна помощь с некоторым кодированием, чтобы скрыть текст, окружающий переменную, если данные пустые, но этот код имеет некоторый поворот вэто я не могу решить.Я пытался сделать мой фрагмент как можно более чистым, и надеюсь, что он все еще остается чистым.

Пожалуйста, потерпите меня, поскольку мои знания PHP очень ограничены.

Этот код является частьюJavaScript для вывода заданной информации.

{
title: "This is it",
file: "thisisit.mp4",
image: "happy.jpg",
description: "some text right here",
},

Мне удалось успешно обернуть эту часть javascript в PHP, поэтому я могу вместо этого использовать переменные и хранить информацию в другом месте.

echo '
{
title: "'.$data[2].' - '.$data[3].' ('.$data[0].') <img src=\"'.$data[10].'\"/>",
file: "'.$data[6].'",
image: "'.$data[9].'",
description: "'.$data[4].' <br><a href='.$data[8].'>Read more</a> ",
},
';

Вышеописанное работает как следует,Если какая-либо переменная заполнена, она будет отображаться как есть, а если она пуста, она ничего не будет выводить.Но теперь я хотел бы иметь текст шаблона или HTML вокруг переменной, чтобы отображать ее только тогда, когда в переменной есть данные.

Взять данные [8] в качестве примера.Данные будут содержать только URL, чтобы узнать больше.Хорошо, пока есть URL, но если URL не указан, он будет отображать ссылку только для чтения без URL.Поэтому, если данные пусты, я бы не хотел отображать текст или ссылки, относящиеся к этой переменной данных.

Я пытался использовать оператор IF, но не знаю, правильный ли это путь, или я простоне знаю, как правильно это реализовать.Что бы я ни делал, это просто приведет к ошибке.

Метод проб и ошибок, подобный этому, все еще внутри того же эха

    echo '
    {
    title: "'.$data[2].' - '.$data[3].' ('.$data[0].') <img class=\"jwTitleIcon\" src=\"'.$data[10].'\"/>",
    file: "'.$data[6].'",
    image: "'.$data[9].'",
    description: "'.$data[4].'  '.if($data[8]) else{.'<br><a href='.$data[8].'</a>} ",
 },
 ';

Или метод проб и ошибок, подобный этому, отделяющийся от другого эха

echo '
{
title: "'.$data[2].' - '.$data[3].' ('.$data[0].') <img class=\"jwTitleIcon\" src=\"'.$data[10].'\"/>",
file: "'.$data[6].'",
image: "'.$data[9].'",
description: "'.$data[4].' ';
 if(empty($data[8]) else { echo ' <br><a href='.$data[8].'>Read more</a> } ",
},
';

Или это (нашел его в чей-то вопрос ), которое не дает ошибок, но каким-то образом код что-то нарушает, поскольку вывод html пуст.Может быть испортить JavaScript, потому что он очень чувствительный

echo '
{
title: "'.$data[2].' - '.$data[3].' ('.$data[0].') <img class=\"jwTitleIcon\" src=\"'.$data[10].'\"/>",
file: "'.$data[6].'",
image: "'.$data[9].'",
description: "'.$data[4].' ';
echo !empty($data[8]) ? '<br><a href='.$data[8].'>Habba hej</a> ':' ",
},
';

Помощь приветствуется.Спасибо

Ответы [ 3 ]

0 голосов
/ 24 мая 2018

Как заявляет Barmar, вам будет проще использовать json_encode.

Эта функция принимает массив в качестве аргумента и выводит соответствующий json.

Итак, в основном, что вам нужнодля этого нужно создать массив с ключами, которые будут вашими ключами в объекте.

Я приведу пример с вашим примером (описанием) и позволю вам адаптироваться к остальным.

$output = []; // We start with an empty array

// Let's consider that there is a description
$output['description'] = $data[4];

if(!empty($data[8])) { // If there is a link at $data[8], append it to the description
    $output['description'] .= '<br><a href='; // append the html
    $output['description'] .= $data[8]; // append the link
    $output['description'] .= '>Read more</a>'; // append the end of the html


    // One line equivalent :
    // $output['description'] .= '<br><a href=' . $data[8] . '>Read more</a>';
}

// Then you echo the json_encoded output
echo json_encode($output);

Другой вариант - использовать оператор if-else, подобный следующему:

$output = []; // We start with an empty array


// Let's consider that there is a description
if(!empty($data[8])) { // If there is a link at $data[8], set the description with a link
    $output['description'] = $data[4] . '<br><a href=' . $data[8] . '>Read more</a>';
} else { // Else = there is no link at $data[8]
    $output['description'] = $data[4];
}

// Then you echo the json_encoded output
echo json_encode($output);

Последний вариант - использовать третичные условия, которые в основном представляют собой условие, которое «дает значение».Несмотря на то, что я считаю, что это не лучший вариант в данном случае, я считаю, что инструкция становится довольно длинной / трудной для чтения:

$output = []; // We start with an empty array


// Let's consider that there is a description
$output['description'] = $data[4] . (!empty($data[8]) ? ('<br><a href=' . $data[8] . '>Read more</a>') : ''); // We add the link if there is a link at $data[8]

// Then you echo the json_encoded output
echo json_encode($output);

Я только что увидел, что в конце есть ","твой фрагментПоэтому я считаю, что вы должны использовать массив массивов и использовать для него json_encode.Например:

function snippet(&$json, $data) // The reason to put &$sjon and not $json is because we need to have a parameter passed by reference
{
    // HERE PLACE THE CODE OF YOUR SNIPPET
    $output = [];

    /* ... add the pieces of information into the output */

    $json[] = $output; // We add the $output to our array
}

$datas = [/*... array of $data*/];

$json = []; // Create the empty array
foreach ($datas as $data) {
    snippet($json, $data); // Call the snippet
}
echo json_encode($json);
0 голосов
/ 05 июня 2018

Бармар помог мне с одной строкой кода!

. (!empty($data[8]) ? "<br><a href='$data[8]'>Habba hej</a>" : "")

Это действительно помогло с помощью echo.Возможно, не лучшее кодирование без использования json encode, которое всем рекомендовано, но теперь оно прекрасно работает, как показано ниже.

Работает

echo '
{ // <- Essential. Starting bracket 
title: "'.$data[2].' - '.$data[3].' ('.$data[0].') <img class=\"jwTitleIcon\" src=\"'.$data[10].'\"/>",
file: "'.$data[6].'",
image: "'.$data[9].'",
description: "'.$data[4] . (!empty($data[8]) ? '<br><a target=\"_blank\" href=\"'.$data[8].'\">Habba hej</a>' : ""). '",
}, // <- Essential. Ending bracket
';

Если код может быть таким же простым, как указано выше,вместо того, чтобы воспользоваться json encode, я могу с радостью внести изменения.Просто помните, что квадратные скобки и запятая }, необходимы.

0 голосов
/ 24 мая 2018

Лучше всего использовать json_encode() для преобразования значения PHP в литерал Javascript, а не делать это с вашими собственными echo инструкциями.

В этом вы можете использовать третичный оператор.

$data2 = array(
    'title' => "$data[2] - $data[3] ($data[0]) <img class='jwTitleIcon' src='$data[10]'>",
    'file' => data[6],
    'image' => $data[9],
    'description' => $data[4] . (!empty($data[8]) ? "<br><a href='$data[8]'>Habba hej</a>" : "")
);
echo json_encode($data2) . ",";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...