簡體   English   中英

比較數組並計算其值

[英]Comparing arrays and counting their values

我如何比較這些數組並計算其值:

$arrayone = array("3", "2", "1", "2", "3");
$arraytwo = array("1", "2", "3", "2", "1");

我的目標不是3(唯一值)或5(通常是相同數量的值),而是4! 第二個數組包含一個太多的1,我如何獲得這樣的新數組:

$arraythree = array("1", "2", "3", "2");

這給了我3個獨特的價值:

$intersect = array_intersect($arrayone, $arraytwo);
$arraythree = array_unique($intersect);
count($arraythree)

這給了我5個非唯一值:

$arraythree = array_intersect($arrayone, $arraytwo);
count($arraythree)

您可以使用以下自定義函數:

function myIntersect($a, $b) {
    foreach ($a as $x) {
        $i = array_search($x, $b);
        if ($i !== false) {
            $c[] = $x;
            unset($b[$i]);
        }
    }
    return $c;
}

如何使用:

$arrayone = array("3", "2", "1", "2", "3");
$arraytwo = array("1", "2", "3", "2", "1");
$result = myIntersect($arrayone, $arraytwo);
print_r($result); // ["3", "2", "1", "2"]

說明

這個想法是從第一個數組中獲取每個值,然后在第二個數組中找到它的第一個位置。 如果找到,則將其復制到結果中, 在找到的位置擦除第二個數組中的匹配值,因此無法再次匹配。

  1. foreach ($a as $x) { ... }$ x是第一個數組中的值
  2. $i = array_search($x, $b); $ i是值在第二個數組中出現的第一個位置,或者,如果找不到,則$ ifalse
  3. if ($i !== false) { :如果搜索成功...
    • $c[] = $x; :然后將值添加到結果數組$ c中並...
    • unset($b[$i]); :...從找到的位置$ b中將其刪除。 請注意,在PHP中,傳遞給函數的數組實際上是原始數組的副本,因此此類刪除對傳遞給函數的原始數組沒有影響。
  4. 對第一個數組中的所有值重復前面的步驟
  5. return $c; :將結果數組返回給調用方

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM