[英]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"]
這個想法是從第一個數組中獲取每個值,然后在第二個數組中找到它的第一個位置。 如果找到,則將其復制到結果中, 並在找到的位置擦除第二個數組中的匹配值,因此無法再次匹配。
foreach ($a as $x) { ... }
: $ x是第一個數組中的值 $i = array_search($x, $b);
: $ i是值在第二個數組中出現的第一個位置,或者,如果找不到,則$ i為false
if ($i !== false) {
:如果搜索成功...
$c[] = $x;
:然后將值添加到結果數組$ c中並... unset($b[$i]);
:...從找到的位置$ b中將其刪除。 請注意,在PHP中,傳遞給函數的數組實際上是原始數組的副本,因此此類刪除對傳遞給函數的原始數組沒有影響。 return $c;
:將結果數組返回給調用方
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.