亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 PHP 中訪問并返回 foreach 的特定值

如何在 PHP 中訪問并返回 foreach 的特定值

PHP
慕田峪9158850 2024-01-19 16:44:43
所以我有一個如下所示的請求響應$json='[ {"item_cat":"Stationary","items":[{"item_name":"A4 Paper","qty":"2"},{"item_name":"Test Paper","qty":"6"}],"total":"2"},{"item_cat":"Computer Accessory ","items":[{"item_name":"Power pack","qty":"2"}],"total":"1"},{"item_cat":"Material","items":[{"item_name":"T-Shirt","qty":"3"},{"item_name":"Cap","qty":"5"}],"total":"2"}]';我正在嘗試獲取每個 item_name 和 qty,以便我可以使用它們來操作我的數據庫。這是我所做的$data = json_decode($json, true);$len = count($data);    for($i =0; $i< $len; $i++){            $item_length = count($data[$i]['items']);        for($c=0; $c < $item_length; $c++){            foreach ($data[$i]['items'][$c] as $key => $value ) {                $qty = '';                if($key == "qty"){                    $qty = $data[$i]['items'][$c];                    }                if($key == 'item_name'){                    $item_name = "$value";                    }                    $sql= $db->query("SELECT `stock` from `inventory` WHERE `item_name` = '$item_name'");                    while ($sql1 = $sql->fetch_assoc()) {                            $stock = $sql1['stock'];                  }                    if($stock > $qty ){                        $stock_balance = $stock - $qty;                    $quantity = (int)$qty;                         $db->query("UPDATE `inventory` SET `stock` =  (`stock` - '$quantity')   WHERE `item_name` = '$item_name'");                    }else{                        echo "<h3> This Operation Not Allowed: Stock Balance Is Less Than The Request <h3>";                    }                }            }        }遇到非數字值,這是 $qty 的結果,因為我無法僅返回 qty 值。我嘗試過其他幾種方法。我真的很累了。如果有任何幫助,我將不勝感激。干杯!
查看完整描述

1 回答

?
慕田峪4524236

TA貢獻1875條經驗 獲得超5個贊

讓我們分解你的代碼。


這是json:


[

   {

      "item_cat":"Stationary",

      "items":[

         {

            "item_name":"A4 Paper",

            "qty":"2"

         },

         {

            "item_name":"Test Paper",

            "qty":"6"

         }

      ],

      "total":"2"

   },

   {

      "item_cat":"Computer Accessory ",

      "items":[

         {

            "item_name":"Power pack",

            "qty":"2"

         }

      ],

      "total":"1"

   },

   {

      "item_cat":"Material",

      "items":[

         {

            "item_name":"T-Shirt",

            "qty":"3"

         },

         {

            "item_name":"Cap",

            "qty":"5"

         }

      ],

      "total":"2"

   }

]

現在沒有 SQL 的數組循環(以確保它按預期工作):


$data = json_decode($json, true);

$len = count($data);


    for($i =0; $i< $len; $i++){

            $item_length = count($data[$i]['items']);


        for($c=0; $c < $item_length; $c++){

            foreach ($data[$i]['items'][$c] as $key => $value ) {


                $qty = '';

                if($key == "qty"){

                    $qty = $data[$i]['items'][$c];

                    }


                if($key == 'item_name'){

                    $item_name = "$value";

                    }

這里的問題是:非人類變量名稱以及不正確使用 JSON 對象。

首先,讓我們將變量重命名為可讀的名稱。

例子:

  • $data[$i]將是$catalog_entry(對象)

  • $data[$i]['items']將是$catalog_entry_items(數組)

  • $data[$i]['items'][$c]將是$catalog_entry_item(一件物品,一個物體)

讓我們用新變量更改代碼:

$data = json_decode($json, true);

$len = count($data);


for($i =0; $i< $len; $i++) {

    $catalog_entry = $data[$i];

    $catalog_entry_items = $data[$i]['items'];

    

    for($c=0; $c < sizeof($catalog_entry_items); $c++) {

        $catalog_entry_item = $data[$i]['items'][$c];

        $qty = $catalog_entry_item['qty'];

        $item_name = $catalog_entry_item['item_name'];

        echo $item_name . ' : ' . $qty . "\n"; // <-- this is for testing

    }

}

運行此代碼并查看預期結果:


A4 Paper : 2

Test Paper : 6

Power pack : 2

T-Shirt : 3

Cap : 5

很好,現在我們有了qty和item_name。


我們來查詢一下。首先看看你的代碼:


$sql= $db->query("SELECT `stock` from `inventory` WHERE `item_name` = '$item_name'");

                    while ($sql1 = $sql->fetch_assoc()) {

                            $stock = $sql1['stock'];

                  }

兩個奇怪的事情:1)可能的 SQL 注入,2)$stock用新值多次替換變量(如果我們有超過 1 行的項目inventory)。


無論如何,如果這段代碼有效(我無法檢查),那么我們進入下一部分:


if ($stock > $qty ) {

    $stock_balance = $stock - $qty;

    $quantity = (int)$qty;

    $db->query("UPDATE `inventory` SET `stock` =  (`stock` - '$quantity')   WHERE `item_name` = '$item_name'");

} else {

    echo "<h3> This Operation Not Allowed: Stock Balance Is Less Than The Request <h3>";

}

首先,不必要地轉換為整數,因此刪除行$quantity = (int)$qty;并放入$stock_balance查詢中。我們將有:


if ($stock >= $qty ) {

    $stock_balance = $stock - $qty;

    $db->query("UPDATE `inventory` SET `stock` =  $stock_balance WHERE `item_name` = '$item_name'");

} else {

    echo "<h3> This Operation Not Allowed: Stock Balance Is Less Than The Request <h3>";

}

……好吧……不只是你累了,所以我現在就結束吧。詢問是否有什么不正確或不理解的地方。


查看完整回答
反對 回復 2024-01-19
  • 1 回答
  • 0 關注
  • 125 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號