4 回答

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊
您$value傳遞給過濾函數(shù)的也是一個(gè)關(guān)聯(lián)數(shù)組。
因此,您必須檢查“值的值”,使用current()使過濾函數(shù)與鍵名無關(guān),從而在需要時(shí)使此代碼可移植。我將函數(shù)參數(shù)命名為$entry避免混淆:
$data= [
'ticket_number' => 'sdfsdfsdf 2',
'strategy_id' => '5',
'journal_entries_strategy_conditions' => [
(int) 0 => [
'strategies_condition_id' => ''
],
(int) 1 => [
'strategies_condition_id' => '1'
]
],
'timeframe' => '',
];
var_dump(
array_filter(
$data['journal_entries_strategy_conditions'],
function($entry) {
$value = current($entry);
return !is_null($value) && $value !== '';
}
)
);
結(jié)果是:
array(1) {
[1]=>
array(1) {
["strategies_condition_id"]=>
string(1) "1"
}
}

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊
因?yàn)樗且粋€(gè)嵌套數(shù)組,所以您需要走更長(zhǎng)的路線并使用 array_column,然后用鍵的交集替換數(shù)組子數(shù)組。
$filtered = array_filter(array_column($arr['journal_entries_strategy_conditions'], 'strategies_condition_id'));
$arr['journal_entries_strategy_conditions'] = array_intersect_key($arr['journal_entries_strategy_conditions'], $filtered);
var_dump($arr);
通過將其設(shè)為單行,可以使其可讀性更差。
并且您不需要為此使用自定義函數(shù)。
Array_filter 默認(rèn)刪除 '' 和 null 值。

TA貢獻(xiàn)1779條經(jīng)驗(yàn) 獲得超6個(gè)贊
由于您在過濾數(shù)組中有一個(gè)關(guān)聯(lián)數(shù)組,從技術(shù)上講它不是空的,這就是您的代碼不起作用的原因。
如果您希望過濾數(shù)組中的指定鍵(假設(shè)該鍵確實(shí)存在)不為空,只需傳遞該鍵值,如下所示:
$data = [
(int) 0 => [
'strategies_condition_id' => '',
'test' => '',
'asd' => 'asd'
],
(int) 1 => [
'strategies_condition_id' => '1'
]
];
$key = 'strategies_condition_id';
$result = array_filter($data, function($value) use ($key) {dump($value); return !is_null($value[$key]) && $value[$key] !== ''; });
輸出:
array:1 [
1 => array:1 [
"strategies_condition_id" => "1"
]
]
數(shù)組0被跳過,因?yàn)樗膕trategies_condition_id鍵為空。
還有另一種簡(jiǎn)單的方法來檢查過濾數(shù)組中是否有空值:
$data = [
(int) 0 => [
'strategies_condition_id' => '',
'test' => 'test'
],
(int) 1 => [
'strategies_condition_id' => '1'
],
(int) 2 => [
'strategies_condition_id' => '2',
'test' => ''
]
];
array_filter($data, function($value) { return !in_array('',$value); });
輸出:
array:1 [
1 => array:1 [
"strategies_condition_id" => "1"
]
]

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超8個(gè)贊
array_filter()
在特定的第一級(jí)元素上使用單個(gè)元素即可完成這項(xiàng)工作。在函數(shù)的回調(diào)內(nèi)部,不需要任何函數(shù)調(diào)用;只需訪問目標(biāo)關(guān)聯(lián)子數(shù)組值并檢查它是否為真。這與函數(shù)式編碼一樣簡(jiǎn)單。
代碼:(演示)
$array['journal_entries_strategy_conditions'] = array_filter(
$array['journal_entries_strategy_conditions'],
fn($row) => $row['strategies_condition_id']
);
與經(jīng)典循環(huán)等效的內(nèi)容可以unset()
有條件地使用。(演示)
foreach ($array['journal_entries_strategy_conditions'] as $i => $row) {
if (!$row['strategies_condition_id']) {
unset($array['journal_entries_strategy_conditions'][$i]);
}
}
或者,如果您希望有一個(gè)重新索引的子數(shù)組,array_splice()
這會(huì)很有幫助。(演示)
foreach ($array['journal_entries_strategy_conditions'] as $i => $row) {
if (!$row['strategies_condition_id']) {
array_splice($array['journal_entries_strategy_conditions'], $i, 1);
}
}
- 4 回答
- 0 關(guān)注
- 208 瀏覽
添加回答
舉報(bào)