鑒于下面的代碼,我如何在里面添加一個 if 陳述句,obj以便最終的 PHP 結果不顯示一個欄位,如果它有一個NULL值?比如如果id_info是NULL,那么"id":[id_info]在實際的PHP頁面中不顯示?我在檔案中的任何地方都找不到此資訊。
<?php
$id_info = ($db->query("SomeSQL query")->fetch_assoc())['id'];
$name_info = ....;
//some more queries
$obj = (object) ["id" => strval($id_info),
"Name" => (object) [
"eng_name" => strval($name_info)
]];
echo json_encode($obj);
?>
uj5u.com熱心網友回復:
首先不要將它添加到物件中:
$obj = [ "Name" => [ "eng_name" => strval($name_info) ] ];
if ($id_info != null) {
$obj["id"] = strval($id_info);
}
uj5u.com熱心網友回復:
正如提到的knittl ,您可以檢查特定值是否為空,而不是將其添加到您的物件中。
如果有必要動態創建物件而無需檢查。您必須為此使用array_filter或任何其他自定義過濾功能。
我撰寫了一個自定義過濾函式,它接受一個深度嵌套的陣列并將其回傳過濾。
function arrayFilter($inputArr){
$output = null;
if (is_array($inputArr)){
foreach ($inputArr as $key=>$val){
if(!$inputArr[$key]) continue;
if (is_array($val)) {
$tmpArr = arrayFilter($val);
if($tmpArr) $output[$key] = array_filter($tmpArr);
}
else $output[$key] = $val;
}
} else {
$output[$key] = $val;
}
return $output;
}
因此,假設您有一個類似于您提供的物件的深層嵌套物件
$obj = (object) [
"id" => null,
"Name" => (object) [
"eng_name" => strval('some name2'),
"de_name" => null,
"more" => (object) [
"fr_name" => strval('some name3'),
"ru_name" => null,
]
]
];
如果您使用如下函式:
$filtered = arrayFilter(json_decode(json_encode($obj), true));
您的輸出將類似于以下內容:
{
"Name":{
"eng_name":"some name2",
"more":{
"fr_name":"some name3"
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/351605.html
下一篇:ActionController::InvalidAuthenticityToken(ActionController::InvalidAuthenticityToken):將JSON引數發布到Rai
