сравнить два JSON массива объектов и вывести заданное c содержимое в php - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть JSON массив объектов, как показано ниже. Следующее содержимое находится в файле (feeds / ptp-ess_landing_house. json) , упомянутом в строке A.

{
    "house_sitting_date_current_month": ["2020-02-01", "2020-02-02", "2020-02-03", "2020-02-04", "2020-02-05", "2020-02-06"],
    "house_sitting_date_yes_no_current_month": ["yes", "nada", "nada", "nada", "yes", "yes"],
    "house_sitting_date_next_month": ["2020-03-01", "2020-03-02", "2020-03-03", "2020-03-04", "2020-03-05", "2020-03-06"],
    "house_sitting_date_yes_no_next_month": ["no", "yes", "yes", "nada", "nada", "nada"],
    "toggle_status": null
}

Для каждой конкретной даты есть значение ( да / нет / нада) связано с этим.

за текущий месяц ($ data_house-> house_sitting_date_current_month) ; 1 февраля , 5 февраля и 6 февраля имеют да (все остальные нада).

На следующий месяц ($ data_house-> house_sitting_date_next_month) ; 2 марта и 3 марта имеют да . 1 марта - это Нет (остальные все нада).

Вот код php:

<?php

if (file_exists('feeds/ptp-ess_landing_house.json')) {
    $data_house = json_decode(file_get_contents('feeds/ptp-ess_landing_house.json'));  // Line A
}

$date = date("Y-m-d");

$sitting_day_str_en = "Sitting day";

$not_a_sitting_day_str_en ="Not a Sitting Day";


?>

<header class="entry-header container">
   <?php
      the_title('<h1 class="entry-title-house">', '</h1>');
    ?>
   <span class="current-date"><?php echo $date ?></span><!-- prints today's date--> // Line B 
         <?php if (ICL_LANGUAGE_CODE == 'en') { ?>        <!-- English -->
                <span class="current-date-answer">Sitting Day</span> // Line C                           
        <?php } ?>
</header>

Постановка проблемы:

В настоящее время у меня есть кодированный Сидящий день на линии C

Мне интересно, какие изменения я должен внести в код php выше (особенно на линии C) , поэтому Строка B ищет / сопоставляет / сканирует ($data_house->house_sitting_date_current_month, $data_house->house_sitting_date_next_month) дату внутри JSON выше и печатает содержимое в Строка C на основе сегодняшней даты в JSON.

Случай 1: Если сегодняшняя дата 2020-02-1 в Строка B и его да для соответствующей даты в JSON, тогда должно быть написано Сидящий день в Line C.

Case 2: Если сегодняшняя дата составляет 2020-03-01 в строке B и ее нет для соответствующей даты в JSON, то в ней должно быть указано «не день заседания» в Строка C.

Случай 3: Если сегодняшняя дата 2020-03-06 * 1 087 * в Строка B и Нада присутствует в JSON для этой конкретной даты, тогда должно быть написано пустое / ничего в Строка C .

Я думаю, нам нужно использовать два цикла foreach, но нужно сделать больше.

<?php foreach ($data_house->house_sitting_date_current_month as $key1 => $val1) {
    foreach ($data_house->house_sitting_date_yes_no_current_month as $key1 => $val1) {


}} ?>


<?php foreach ($data_house->house_sitting_date_next_month as $key2 => $val2) {
    foreach ($data_house->house_sitting_date_yes_no_next_month as $key2 => $val2) {


}} ?>

1 Ответ

1 голос
/ 07 февраля 2020

Вам нужно найти интересующую вас дату в двух массивах дат сидения в $data_house, используя array_search, а затем использовать этот ключ, чтобы решить, сидит ли дом или нет (или если нет информации). Это можно использовать для генерации строки для вывода в выводе HTML:

$date = date("Y-m-d");

$sitting_day_str_en = "Sitting day";

$not_a_sitting_day_str_en ="Not a Sitting Day";

if (($k = array_search($date, $data_house->house_sitting_date_current_month)) !== false) {
    $sitting = $data_house->house_sitting_date_yes_no_current_month[$k];
    $sitting_str_en = $sitting == 'yes' ? $sitting_day_str_en : ($sitting == 'no' ? $not_a_sitting_day_str_en : '');
}
elseif (($k = array_search($date, $data_house->house_sitting_date_next_month)) !== false) {
    $sitting = $data_house->house_sitting_date_yes_no_next_month[$k];
    $sitting_str_en = $sitting == 'yes' ? $sitting_day_str_en : ($sitting == 'no' ? $not_a_sitting_day_str_en : '');
}
else {
    // not found
    $sitting_str_en = 'No data available';
}

?>

<header class="entry-header container">
   <?php
      the_title('<h1 class="entry-title-house">', '</h1>');
    ?>
   <span class="current-date"><?php echo $date ?></span><!-- prints today's date--> // Line B 
         <?php if (ICL_LANGUAGE_CODE == 'en') { ?>        <!-- English -->
                <span class="current-date-answer"><?= $sitting_str_en ?></span> // Line C                           
        <?php } ?>
</header>

(на сегодня, 2020-02-06):

<header class="entry-header container">
   <h1 class="entry-title-house">House Sitting Days</h1>   <span class="current-date">2020-02-06</span><!-- prints today's date--> // Line B 
                 <!-- English -->
                <span class="current-date-answer">Sitting day</span> // Line C                           
        </header>

Demo на 3v4l.org

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...