如何使用 PHP 删除空值?
How to remove null values with PHP?
我是处理 JSON 的新手,PHP 我在清理这种类型的数组时遇到了问题。这是我认为可行的方法,但我还不明白它是如何行不通的
for ($i = 0; $i < count($items); $i++) {
if ($items[$i][] === null) {
unset($items[$i]['']);
}
}
[
{
"ticketNumber": Ha&51,
"qty": 0,
"title": "Wheat",
"price": 44.2,
"purchaseDate": null,
"date": null
},
{
"ticketNumber": H88i51,
"qty": 2,
"title": "Prince",
"price": 12.99,
"purchaseDate": null,
"date": null
}
]
您不需要循环,只需使用 array_filter
<?php
$array = array(1 => "PHP code tester Sandbox Online", 2 => null);
print_r($array);
$arrayFiltered = array_filter($array);
print_r($arrayFiltered);
这是一个简短的example
这是一种方法:
<?php
$s = <<<eof
[{"ticketNumber": "Ha&51","qty": 0,"title": "Wheat", "price":
44.2,"purchaseDate": null,"date": null},{ "ticketNumber": "H88i51","qty":
2, "title": "Prince", "price": 12.99,"purchaseDate": null,"date": null}]
eof;
$m_json = json_decode($s, true);
$f = fn ($v): bool => $v !== null;
foreach ($m_json as $m_tick) {
$a[] = array_filter($m_tick, $f);
}
var_export($a);
我个人不喜欢这样,因为您将不同类型的值传递给过滤器函数。使用强类型语言,这是不允许的。但另一种方法是枚举“好的”属性,因此在这种情况下这似乎是一个很好的折衷方案。
我是处理 JSON 的新手,PHP 我在清理这种类型的数组时遇到了问题。这是我认为可行的方法,但我还不明白它是如何行不通的
for ($i = 0; $i < count($items); $i++) {
if ($items[$i][] === null) {
unset($items[$i]['']);
}
}
[
{
"ticketNumber": Ha&51,
"qty": 0,
"title": "Wheat",
"price": 44.2,
"purchaseDate": null,
"date": null
},
{
"ticketNumber": H88i51,
"qty": 2,
"title": "Prince",
"price": 12.99,
"purchaseDate": null,
"date": null
}
]
您不需要循环,只需使用 array_filter
<?php
$array = array(1 => "PHP code tester Sandbox Online", 2 => null);
print_r($array);
$arrayFiltered = array_filter($array);
print_r($arrayFiltered);
这是一个简短的example
这是一种方法:
<?php
$s = <<<eof
[{"ticketNumber": "Ha&51","qty": 0,"title": "Wheat", "price":
44.2,"purchaseDate": null,"date": null},{ "ticketNumber": "H88i51","qty":
2, "title": "Prince", "price": 12.99,"purchaseDate": null,"date": null}]
eof;
$m_json = json_decode($s, true);
$f = fn ($v): bool => $v !== null;
foreach ($m_json as $m_tick) {
$a[] = array_filter($m_tick, $f);
}
var_export($a);
我个人不喜欢这样,因为您将不同类型的值传递给过滤器函数。使用强类型语言,这是不允许的。但另一种方法是枚举“好的”属性,因此在这种情况下这似乎是一个很好的折衷方案。