В PHP как вы получаете доступ к данным из многомерных массивов с несколькими ключами - PullRequest
0 голосов
/ 12 ноября 2019

Это массив:

$weatherData = [
    "Chicago" => [45, "fog",   ["Mon" => [44, "fog"], "Tue" => [42, "sleet"], "Wed" => [40, "rain"], "Thu" => [44, "cloudy"], "Fri" => [45, "cloudy"]]],
    "Paris" =>   [73, "sunny", ["Mon" => [75, "sunny"], "Tue" => [75, "sunny"], "Wed" => [68, "cloudy"], "Thu" => [66, "cloudy"], "Fri" => [60, "rain"]]],
    "Calgary" => [-8, "snow",  ["Mon" => [-7, "snow"], "Tue" => [-10, "snow"], "Wed" => [-3, "sleet"], "Thu" => [0, "cloudy"], "Fri" => [3, "sunny"]]]
];

У меня уже есть функция для вывода общей информации о каждом городе (например: для Чикаго я вывел «45» и «туман»):

function outputBox($weatherData)
{
    foreach ($weatherData as $key => $value) {
        echo "<article class='box'";
        echo "<h1>$key</h1>";
        echo "<div class='weather'>";
        echo "<img src='images/$key.jpg' />";
        echo "<div>";
        echo "<h2>$value[0]</h2>";
        echo "<p>$value[1]</p>";
        echo "</div>";
        echo "</div>";
    }

    outputForecast($weatherData);
}

А теперь мне нужно вывести другую информацию, например, о Чикаго: «Пн 44 тумана», «Вт 42, дождь со снегом» ... Пока что я получил это:

function outputForecast($weatherData){

    foreach ($weatherData[1] as $key => $value){
        echo "<section>";
        echo "<div>";
        echo "<h3>$key</h3>";
    }
}

Не знаюЯ не знаю, какой код нужен для доступа к этим номерам для моего цикла, но он должен вывести подробности по понедельникам, пожалуйста, помогите, спасибо!

Ответы [ 3 ]

0 голосов
/ 12 ноября 2019

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

function outputBox($weatherData)
{
    foreach ($weatherData as $key => $value) {
        echo $key.", ".$value[0].", ".$value[1].", ".'</br>';
        if(!empty($value[2])){
           foreach ($value[2] as $k1 => $v1) {
               echo '"'.$k1." ".$v1[0]." ".$v1[1].'"';
           }
        }
        echo '</br>';
    }
}

print_r(outputBox($weatherData));

OutPut:

Chicago, 45, fog, 
"Mon 44 fog""Tue 42 sleet""Wed 40 rain""Thu 44 cloudy""Fri 45 cloudy"
Paris, 73, sunny, 
"Mon 75 sunny""Tue 75 sunny""Wed 68 cloudy""Thu 66 cloudy""Fri 60 rain"
Calgary, -8, snow, 
"Mon -7 snow""Tue -10 snow""Wed -3 sleet""Thu 0 cloudy""Fri 3 sunny"
0 голосов
/ 12 ноября 2019
$weatherData = [
    "Chicago" => [45, "fog", ["Mon" => [44, "fog"], "Tue" => [42, "sleet"], "Wed" => [40, "rain"], "Thu" => [44, "cloudy"], "Fri" => [45, "cloudy"]]],
    "Paris" => [73, "sunny", ["Mon" => [75, "sunny"], "Tue" => [75, "sunny"], "Wed" => [68, "cloudy"], "Thu" => [66, "cloudy"], "Fri" => [60, "rain"]]],
    "Calgary" => [-8, "snow", ["Mon" => [-7, "snow"], "Tue" => [-10, "snow"], "Wed" => [-3, "sleet"], "Thu" => [0, "cloudy"], "Fri" => [3, "sunny"]]]
];

printData($weatherData);

function printData($weatherData)
{
    foreach ($weatherData as $key => $data) {
        echo '****<b>' . $key . ': ' . $data[0];
        echo ' ' . $data[1] . '</b>****<br>';
        echo json_encode($data[2]) . '<br><br>';
    }
}

Выход

****Chicago: 45 fog****
{"Mon":[44,"fog"],"Tue":[42,"sleet"],"Wed":[40,"rain"],"Thu":[44,"cloudy"],"Fri":[45,"cloudy"]}
****Paris: 73 sunny****
{"Mon":[75,"sunny"],"Tue":[75,"sunny"],"Wed":[68,"cloudy"],"Thu":[66,"cloudy"],"Fri":[60,"rain"]}
****Calgary: -8 snow****
{"Mon":[-7,"snow"],"Tue":[-10,"snow"],"Wed":[-3,"sleet"],"Thu":[0,"cloudy"],"Fri":[3,"sunny"]}
0 голосов
/ 12 ноября 2019

Hy scoobidydoo, вы близки к решению, но вам нужно прочитать о массиве PHP. Очень интересно играть с кодом. Просто измените обе функции,

Вот решение: https://paiza.io/projects/Led6GCYVW6HV1dIZH6MdVQ?language=php

function outputBox($weatherData)
{
    foreach ($weatherData as $key => $value) {
        echo "<article class='box'>";
        echo "<h1>$key</h1>";
        echo "<div class='weather'>";
            echo "<img src='images/$key.jpg' />";
            echo "<div>";
            echo "<h2>$value[0]</h2>";
            echo "<p>$value[1]</p>";
        echo "</div>";
        echo "</article>";

        outputForecast($value[2]);
        echo '<hr/>';
    }
}

function outputForecast($valueDays){
    echo "<h2>Forecast</h2>";
    foreach ($valueDays as $key => $value){
        echo "<section>";
            echo "<div>";
                echo "<h3>$key</h3>";
                echo "<p>$value[0] - $value[1]</p>";
            echo "</div>";
        echo "</section>";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...