3 回答

TA貢獻1877條經驗 獲得超6個贊
對于這種情況,我認為函數式編程不是非常可讀/有吸引力。只需使用一個簡單的 foreach 循環并有條件地獲取與共享索引相關的單詞。
由于這兩個數組共享公共索引,因此無需對這combine兩個數組進行操作——只需引用索引即可。
代碼:(演示)
$dat = ["2020-02-01", "2020-02-05", "2020-02-10", "20-02-12", "2020-02-15"];
$word = ["Attend To,Explore,Unaided,dull,bad"];
$words = explode(',', $word[0]);
//User input
$start = "2020-01-01";
$end = "2020-02-07";
$result = [];
foreach ($dat as $index => $date) {
if ($date >= $start && $date <= $end) {
$result[] = $words[$index];
}
}
var_export($result);
輸出:
array (
0 => 'Attend To',
1 => 'Explore',
)

TA貢獻1942條經驗 獲得超3個贊
之后將保留原始密鑰array_filter,因此通過計算交集來獲取相同密鑰的條目??雌饋磉@$word是一個帶有字符串的單元素數組,所以只需分解它:
$word_result = array_intersect_key(explode(',', $word[0]), $result);
查看演示。
如果其中一個數組具有唯一值,您可以組合該數組并對其進行操作。
$comb = array_combine(explode(',', $word[0]), $dat);
$result = array_filter($comb, function($data_item) use($start,$end) {
return $data_item >= $start && $data_item <= $end;
});
這產生:
Array
(
[Attend To] => 2020-02-01
[Explore] => 2020-02-05
)
您可以按原樣使用數組,也可以array_keys將鍵用作數組$word。
如果不能保證是,$word[0]那么您可以使用reset($word)or current($word)。

TA貢獻1798條經驗 獲得超3個贊
假設數組具有相同的鍵(我更改它以反映這一點)的可能解決方案是使用常量ARRAY_FILTER_USE_BOTHto array_filter,以便該鍵在回調函數中可用。
$result2在這里,我在過濾數據時用單詞填充第二個數組(請注意,添加的東西use是$result2通過引用傳遞的):
$dat = array("2020-02-01","2020-02-05","2020-02-10","20-02-12","2020-02-15");
$word = array("Attend To","Explore","Unaided","dull","bad");
//User input
$start = "2020-01-01";
$end = "2020-02-07";
//Filter out dates between start and end date
$result2 = [];
$result = array_filter($dat, function($data_item, $key) use($start, $end, $word, &$result2) {
if($data_item >= $start && $data_item <= $end){
$result2[$key] = $word[$key];
return true;
}
return false;
}, ARRAY_FILTER_USE_BOTH);
當只需要過濾時,AbraCadaver 的答案非常適合,但如果有人必須在過濾器回調中執行額外操作,這可能很有用。
- 3 回答
- 0 關注
- 140 瀏覽
添加回答
舉報