[英]Php filter multidimensional array
我有這樣的數組:
arr=[
627=[
'lead_data'=>['name'=>'Name1', 'date'=>'2019-04-09']
],
500=[
'lead_data'=>['name'=>'Name2', 'date'=>'2018-05-07']
],
534=[
'lead_data'=>['name'=>'Name3', 'date'=>'2019-07-10']
],
100=[
'lead_data'=>['name'=>'Name4', 'date'=>'2019-05-12']
],
]
如何過濾日期在 2019-05-01 和 2019-07-12 之間的數組。 因此,結果將有 ID 為 534 和 100 的元素。或者日期是 >= 2019-07-05 或日期是 <= 2019-01-01 ?
我知道有 array_filter 函數,但不明白在這種情況下如何使用它? 請幫忙,謝謝
最簡單的解決方案是像這樣迭代你的數據:
<?php
$begin = date('Y-m-d', strtotime("2019-05-01"));
$end = date('Y-m-d', strtotime("2019-07-12"));
foreach($array as $key => $data)
{
$date = date('Y-m-d', strtotime($$data['date']));
if (($$data > $begin) && ($date < $end)){
unset($array[$key]);
}
}
var_dump($array);
請務必查看 php.net 上的官方文檔,因為它通常有大量示例和非常詳盡的解釋。
在您的情況下,您可以將日期作為字符串進行比較(因為它們采用 Ymd 格式並且按字母順序比較它們就行了):
$filtered = array_filter($arr, function ($item) {
return ($item['lead_data']['date'] > '2019-05-01') && ($item['lead_data']['date'] < '2019-07-12');
});
通過使用array_filter()
和use
關鍵字,您可以向過濾器提供變量 - 這可以是限制的開始和結束日期。
使用array_filter()
,如果回調中的return
值為 true,則數據將保留在數組中,否則將被刪除。 然后比較日期,看看它們是否大於$from
,小於$to
。
$from = '2019-05-01';
$to = '2019-07-12';
$result = array_filter($arr, function ($v) use ($from, $to) {
return $v['lead_data']['date'] > $from && $v['lead_data']['date'] < $to;
});
print_r($result);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.