ช่วยดูเกี่ยวกับ json_decode ให้หน่อยครับ พอนำมาเเปลงเป็น array กลับเเสดงข้อมูลไม่ถูกต้อง

ถาม-ตอบ แนะนำไอเดียว โค้ดตัวอย่าง แนวทาง วิธีแก้ปัญหา ช่วยดูเกี่ยวกับ json_decode ให้หน่อยครับ พอนำมาเเปลงเป็น array กลับเเสดงข้อมูลไม่ถูกต้อง

ช่วยดูเกี่ยวกับ json_decode ให้หน่อยครับ พอนำมาเเปลงเป็น array กลับเเสดงข้อมูลไม่ถูกต้อง
ผมจะลองเขียนเว็ปเกี่ยวกับการตรวจสอบไวรัส covid19 โดยได้มีการดึง api จากเว็ปนึงมา เป็นแบบ json พอนำมาเเปลง เป็น array ด้วย json_decode เเต่พอทำการ echo เพื่อเเสดงข้อมูลของเเต่ละฟิว มันกลับดึงข้อมูลจากทุกฟิว ดึงมาเฉพาะข้อมูลตัวหน้า มาเเสดงรวมกัน ซึ่งไม่เเน่ใจว่า ผมเขียนอะไรผิดหรือเปล่า รบกวนแก้ไขให้หน่อยครับ

<?php
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL => "https://coronavirus-monitor.p.rapidapi.com/coronavirus/worldstat.php",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "GET",
    CURLOPT_HTTPHEADER => array(
        "x-rapidapi-host: coronavirus-monitor.p.rapidapi.com",
        "x-rapidapi-key: 2c0355e97emsh0da41a8dca40badp1fe9fdjsnf2510cc296b0"
    ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response;
}

$html = json_decode($response,true);

?>


<div class="container">
    <div class="row">

        <div class="col-md-3">
            <ul class="social-icons">
                <?php
                foreach ($html AS $k => $v) {
                    echo $v['total_cases'];
                }
                ?>

            </ul>	
        </div>	
    </div>
</div>
ส่วนนี้เป็น array ของข้อมูล
Array ( [total_cases] => 186,670 [total_deaths] => 7,468 [total_recovered] => 80,338 
[new_cases] => 4,230 [new_deaths] => 321 [statistic_taken_at] => 2020-03-17 11:40:03 )
ข้อมูลที่เเสดง  => 178432



Antinew007 17-03-2020 18:46:08

คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )

 ความคิดเห็นที่ 1
ศึกษาการใช้งาน Array ใน PHP พื้้นฐานเพิ่มเติม

<?php
$curl = curl_init();
 
curl_setopt_array($curl, array(
    CURLOPT_URL => "https://coronavirus-monitor.p.rapidapi.com/coronavirus/worldstat.php",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "GET",
    CURLOPT_HTTPHEADER => array(
        "x-rapidapi-host: coronavirus-monitor.p.rapidapi.com",
        "x-rapidapi-key: 2c0355e97emsh0da41a8dca40badp1fe9fdjsnf2510cc296b0"
    ),
));
 
$response = curl_exec($curl);
$err = curl_error($curl);
 
curl_close($curl);
 
if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response;
}
 
$html = json_decode($response,true);
echo "<pre>";
 print_r($html); // ดูโครงสร้าง array
 echo "</pre>";
?>
 
 
<div class="container">
    <div class="row">
 
        <div class="col-md-3">
            <ul class="social-icons">
                <?php
				// วนลูปแสดงข้อมูล array แสดง key และ value
                foreach ($html as $k => $v) {
					echo $k."  -  ".trim($v)."<br>";
                }
                ?>
 
            </ul> 
        </div>    
    </div>
</div>


ข้อมูล string หรือที่เรียกว่า JSON String data ที่ได้กลับมา
มีรูปแบบเป็น JSON object
 
{"total_cases":"188,383","total_deaths":"7,499","total_recovered":"80,848","new_cases":"5,940","new_deaths":"352","statistic_taken_at":"2020-03-17 13:34:04"}
 
หลังจากเราแปลงเป็น array ใน php ด้วย json_decode() พร้อมกับ parameter ตัวที่สองเป็น true
จะได้ตัวแปร array เช่นเรากำหดนเป็น $html ก็จะสามารถอ้างอิงตัวแปรจาก
 
Array
(
    [total_cases] => 188,383
    [total_deaths] => 7,499
    [total_recovered] => 80,848
    [new_cases] => 5,940
    [new_deaths] => 352
    [statistic_taken_at] => 2020-03-17 13:34:04
)
 
ก็จะได้เป็น
 
echo $html['total_cases']; // มีค่าเท่ากับ 188,383
 
สามารถนำไปใช้งานตามแต่ละ key ได้เลย
 
แต่ถ้าสมมติ เราได้ข้อมูล JSON String data มาในรูปแบบ Array Object เช่น
 
[{"total_cases":"188,383","total_deaths":"7,499","total_recovered":"80,848","new_cases":"5,940","new_deaths":"352","statistic_taken_at":"2020-03-17 13:34:04"},
{"total_cases":"188,383","total_deaths":"7,499","total_recovered":"80,848","new_cases":"5,940","new_deaths":"352","statistic_taken_at":"2020-03-17 13:34:04"}]
 
เราจะได้ array เป็นแบบ สองมิติ
 
Array
(
    [0] => Array
        (
            [total_cases] => 188,383
            [total_deaths] => 7,499
            [total_recovered] => 80,848
            [new_cases] => 5,940
            [new_deaths] => 352
            [statistic_taken_at] => 2020-03-17 13:34:04
        )

    [1] => Array
        (
            [total_cases] => 188,383
            [total_deaths] => 7,499
            [total_recovered] => 80,848
            [new_cases] => 5,940
            [new_deaths] => 352
            [statistic_taken_at] => 2020-03-17 13:34:04
        )

)
 
กรณีที่สองนี้ เราสามารถใช้คำสั่ง foreach() แทนได้
 


ninenik 17-03-2020






เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ