2017-08-14 78 views
0

你好試圖找到在數組中的重複值,我有這樣的檢查是否值爆炸數組被複制與其他爆炸值

$array = array('1%2','3%4','1%2',1%3); 

陣列,所以我想找到重複2%後,所以我用爆炸中的foreach

,所以我想$s[1]檢查,如果%在數組複製 後值反正是有做

+1

存儲在數組中的爆炸校驗值,然後檢查未來值針對陣列'in_array' – yanman1234

+0

我不明白函數如何in_array會幫我複製的顯示值? –

回答

1

當您循環查看重複項時,您需要收集正確的值。我通過他們的「偏移量」[2]來訪問字符串的右側值。找到後,可以用break退出循環。

代碼:(Demo

$array=['1%2','3%4','1%2','1%3']; 
$kept=[]; 
foreach($array as $i=>$v){ 
    if(in_array($v[2],$kept)){ 
     echo "Element (index $i) containing $v has duplicate right side value."; 
     break; 
    } 
    $kept[]=$v[2]; 
} 

輸出:

Element (index 2) containing 1%2 has duplicate right side value. 

如果你想搜索與%2結尾的所有元素,你可以使用preg_grep()

代碼:

$search=2; 
$array=['1%2','1%3','1%4','3%2','5%2']; 
var_export(preg_grep("/%{$search}$/",$array)); 

輸出:

array (
    0 => '1%2', 
    3 => '3%2', 
    4 => '5%2', 
) 

或者沒有正則表達式,這將需要更多的函數調用:

$search=2; 
$array=['21%2','1%3','2%22','1%4','3%21','5%2']; 
var_export(array_filter($array,function($v)use($search){return strpos($v,"%$search")+2===strlen($v);})); 

輸出:

array (
    0 => '21%2', 
    5 => '5%2', 
) 

... [深呼吸]這裏將試圖回答#4 ...

代碼:

$array=['1%2','1%3','1%4','3%2','5%2']; 
foreach($array as $v){ 
    $grouped[explode('%',$v)[1]][]=$v; // use right side number as key 
} 
var_export($grouped); 

輸出:

array (
    2 => 
    array (
    0 => '1%2', 
    1 => '3%2', 
    2 => '5%2', 
), 
    3 => 
    array (
    0 => '1%3', 
), 
    4 => 
    array (
    0 => '1%4', 
), 
) 

如果你想計算數組中的右側值:

$array=['1%2','1%3','1%4','3%2','5%2']; 
$array=preg_replace('/\d+%/','',$array); // strip the left-size and % from elements 
var_export(array_count_values($array)); // count occurrences 

輸出:

// [right side values] => [counts] 
array (
    2 => 3, 
    3 => 1, 
    4 => 1, 
) 
+0

你好,謝謝,但$ v [2]返回1%2,但我需要搜索%之後的數字,並檢查它是否重複可以說我的數組像這樣$ a = array('1%2','1% 3' , '1%4', '3%2', '5%2');我想我的輸出是,有3個重複值1%2,3%2和5%2 –

+0

我已經添加了一個搜索變量到我的最新方法。這是你想要的? – mickmackusa

+0

你好,謝謝你,但2只是一個例子,我打算檢查每個數字後,如果有重複的意思a =數組('1%3','2%4','3%3','5%4', '1%6', '3%2');我想輸出是像2號重複值3號,有2號重複值4號,這就是我想要的,值後%它的自定義值用戶可以添加任何數字 –