2015-07-10 65 views
-1

我需要檢查元素'a'是否出現兩次,'b'出現兩次,'c'出現在一組數組中。每個元素應該有五個不同的數組。檢查每個值是否在不同的陣列中

這就像數組1中的'a',數組2中的另一個'a',數組3中的'b',數組4中的另一個'b'以及數組5中的'c'。應該有至少五個或更多的數組,每個元素應該在不同的數組使用PHP。現在,我的代碼是

$arr = array(
    $branch1 = array('a', 'b'), 
    $branch2 = array('b','c'), 
    $branch3 = array('a', 'c'), 
    $branch4 = array('c', 'a'), 
    $branch5 = array('b', 'a'), 
    $branch6 = array('b', 'c', 'a') 
    );//This may have any number of branches and any kind of combinations of a, b and c(but each element only once in each array). 

$reqd_branch_count = 5;//required branch count 

由於我是新來的PHP,現在我已經寫了很長的代碼,但嘗試新combinations.Please幫我,如果有人知道,當它失敗。

+1

*我嘗試了很多......但未能*你嘗試過什麼? –

+1

你試過了什麼?它會幫助別人更好地理解你的問題並寫出好的答案 – Ajoy

+0

我沒有把它作爲數組..但是需要邏輯來解決,如果我在數組中獲得這些值 – Aparna

回答

0

如果我理解正確的

合併所有陣列,算上所有項目的數量在所有的數組和測試你想要

$arr = array_merge($branch1,$branch2,$branch3,$branch4,$branch5,$branch6); 
$count = array_count_values($arr); 

echo $count[7]; // 4 
echo $count[4]; // 2 

因此,宥可以使病情

if (($count[7] == 1) or ($count[7] == 2) or ($count[5] == 2) or ($count[4] == 2)) 
    { any stuff for true} 

UPDATE

$arr = array(
$branch1=array('3'), 
$branch2=array('4'), 
$branch3=array('3','5','7'), 
$branch4=array('3','4','7'), 
$branch5=array('7'), 
$branch6=array('4','7')); 
// find rank per branch 
$ranks = array_map('max', $arr); 
// make array rank => amount 
$count = array_replace(array_fill(0,7,0), array_count_values($ranks)); 

if (($count[7] >= 1) and (($count[7] + $count[5]) >= 2) and (($count[7] + $count[5] + $count[4]) >= 5)) { 
    echo "Satisfy "; 
} 
+0

我已經更新了該問題。請檢查並儘可能幫助 – Aparna

+0

@Aparna看看我的另一個答案 – splash58

0

因爲這是另外一個問題,這是另一種答案

$arr = array(
    $branch1 = array('a'), 
    $branch2 = array('b','c'), 
    $branch3 = array('a', 'c'), 
    $branch4 = array('c', 'a'), 
    $branch5 = array('a'), 
    $branch6 = array('c', 'a') 
    ); 

$names = array('a', 'b', 'c'); // for convenience only 
var_dump(goNext($arr, $names)); // watch result 

function goNext($arr, $names) { 
    // for each name make array with list of brances where it is 
    $in = array(array(), array(), array()); 
    foreach($arr as $k1 => $branch) 
     foreach($names as $k2 => $letter) 
      if(in_array($letter, $branch)) $in[$k2][] = $k1; 

    foreach ($in[0] as $i1) // 1st a 
     foreach (array_diff($in[0], array($i1)) as $i2) // 2nd a 
      foreach (array_diff($in[1], array($i1,$i2)) as $i3) // 1st b 
       foreach (array_diff($in[1], array($i1,$i2,$i3)) as $i4) // 2nd b 
        foreach(array_diff($in[2], array($i1,$i2,$i3,$i4)) as $i5) { 
         // if here we find combination we need 
         // next line only for debug 
         // it shows set of branches that give true 
         // a   a   b   b   c 
         echo $i1 . " " . $i2 . " " . $i3 . " " . $i4 . " " . $i5; 
         return(true); 
        } 
    return(false); // combination has not found 
} 
相關問題