亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何關聯和過濾兩個相關的數組?

如何關聯和過濾兩個相關的數組?

PHP
慕尼黑8549860 2023-04-28 14:20:23
我有兩個數組,我想在處理它們時將它們鏈接在一起。$dat = array(    "2020-02-01",     "2020-02-05",    "2020-02-10",    "2020-02-12",    "2020-02-15");$word = array(    "Attend To,Explore,Unaided,dull,bad"); //User input$start = "2020-01-01";$end = "2020-02-07";我希望輸入也影響第二個數組,所以當第一個數組從第一個 2 獲得結果時,第二個數組也應該從第一個 2 獲得結果。//Filter out dates between start and end date$result = array_filter($dat, function($data_item) use($start, $end) {    return $data_item >= $start && $data_item <= $end;});結果是Array(    [0] => 2020-02-01    [1] => 2020-02-05)我希望它能夠鏈接$dat,$word這樣 word 的結果也將是Array(    [0] => Attend To    [1] => Explore)
查看完整描述

3 回答

?
慕哥9229398

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',

)


查看完整回答
反對 回復 2023-04-28
?
手掌心

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)。


查看完整回答
反對 回復 2023-04-28
?
呼如林

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 的答案非常適合,但如果有人必須在過濾器回調中執行額外操作,這可能很有用。


查看完整回答
反對 回復 2023-04-28
  • 3 回答
  • 0 關注
  • 140 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號