我有以下 json 對象,{"products": [{ "type": "HR_ECLAIM", "name": "HR Claims", "is_fixed_price": true, "price": 500.5, "currency": "MYR", "status": "true" }, { "type": "HR_ELEAVE", "name": "HR Leave", "is_fixed_price": true, "price": 500, "currency": "MYR", "status": "false" }, { "type": "FIN_ADVISORY", "name": "Finance Advisory", "is_fixed_price": false, "currency": "MYR", "status": "true" }],"total_invoices": "100-600","total_staffs": "500-400","google_drive_url": "https:\/\/drive.google.com\/open?id=1Is6QsnuMLu9ZIpqeEzR2O2Ve1wUyF92aVCg55kWsOgc","remark": "","status": "pending"}我想刪除所有status = 'false'的產品我如何使用下面的代碼解決上述問題。但,$orders = (new Agos())->load($id); $json = $orders->data; $json = json_decode($json);foreach($json->products as $k=>$v) { foreach ($json->products[$k] as $key=>$value) { if ($key === "status" && $value === "false") { unset($json->products[$k]); } json_encode($value, true); } }它像這樣返回輸出,{"products":{"0":{"type":"HR_ECLAIM","name":"HR Claims","is_fixed_price":true,"price":500.5,"currency":"MYR","status":"true"},"2":{"type":"FIN_ADVISORY","name":"Finance Advisory","is_fixed_price":false,"currency":"MYR","status":"true"}},"total_invoices":"100-600","total_staffs":"500-400","google_drive_url":"https:\/\/drive.google.com\/open?id=1Is6QsnuMLu9ZIpqeEzR2O2Ve1wUyF92aVCg55kWsOgc","remark":"","status":"pending"}有人可以幫助從產品輸出中刪除 0 和 2。有人可以幫我解決這個問題嗎?
1 回答

斯蒂芬大帝
TA貢獻1827條經驗 獲得超8個贊
我不確定是否json_output['order_info']['products']正確,因為order_info您的問題中的 JSON 數據中沒有,但只是假設這部分是正確的。
主要問題是您unset()只是取消設置foreach循環中使用的值,而不是從原始數組中刪除任何內容。因此,如果您使用原始數組和循環中的索引,您應該能夠使用false
unset($products[$hitsIndex]);
在您的輸出中,您有true第二個參數json_encode- 這應該是某種形式的選項,而不僅僅是true- 類似JSON_PRETTY_PRINT.
更新:
在您的問題中編輯代碼后,新版本應該類似于...
foreach($json->products as $index => $product) {
if ( $product->status == "false") {
unset($json->products[$index]);
}
}
$json->products = array_values($json->products);
echo json_encode($json, JSON_PRETTY_PRINT);
- 1 回答
- 0 關注
- 83 瀏覽
添加回答
舉報
0/150
提交
取消