检查每个值是否在不同的阵列中

问题描述:

我需要检查元素'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

如果我理解正确的

合并所有阵列,算上所有项目的数量在所有的数组和测试你想要

$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

因为这是另外一个问题,这是另一种答案

$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 
}