匹配数组值对(PHP)

匹配数组值对(PHP),php,arrays,Php,Arrays,我已经为此奋斗了几个小时,我完全被卡住了 我随机生成数字并找到它们的素因子。例如 420的基本因子:2,2,3,5,7 690的主要因素:2,3,5,23 我想在列出匹配对和“不常见”因素时分别强调它们。所以,在这种情况下,我想要像 420的主要因素:2,2,3,5,7 690的主要因素:2,3,5,23 然后,420中的其他2和7以及690中的23将以红色突出显示(例如) 我已经有了数组中的基本因子列表($factor\u list\u 1\u old和$factor\u list\u 2\u

我已经为此奋斗了几个小时,我完全被卡住了

我随机生成数字并找到它们的素因子。例如

420的基本因子:2,2,3,5,7
690的主要因素:2,3,5,23

我想在列出匹配对和“不常见”因素时分别强调它们。所以,在这种情况下,我想要像

420的主要因素:2,2,35,7
690的主要因素:235,23

然后,420中的其他2和7以及690中的23将以红色突出显示(例如)

我已经有了数组中的基本因子列表(
$factor\u list\u 1\u old
$factor\u list\u 2\u old
)。我还有数组中的公共因子列表(
$commons
)和数组中的不常见因子列表(
$uncommons

我尝试了很多方法,但似乎没有任何方法适用于所有场景。我可以让这个场景正常工作,但是对于420和780之类的东西它就失败了


有什么想法吗?

编写如下代码:

   $first = array( 2, 3, 5, 7);
    $second = array(2, 3, 5, 23);
    $prime = "Prime Factors of 420:";
    $scndprim = "Prime Factors of 690:";
    foreach ($first as $key => $value) {
       if(in_array($value, $second))
       {
        $prime .="<b>".$value."</b>,";
        $array_common[] = $value;
       }else{
        $prime .=$value.",";
        $array_uncommon[] = $value;       
       }
       // ========= for second array 
       if(in_array($second[$key], $first))
       {

        $scndprim .="<b>".$second[$key]."</b>,";

       }else{

        $scndprim .=$second[$key].",";
        $array_uncommon[] = $second[$key];
       }
    }
        echo "<pre />";
         print_r(trim($prime,','));  
         print_r(trim($scndprim,',')); 
         //-- Common and uncommon arrays 
         echo " <br>common elements are ";
          print_r(join(",",$array_common));
           echo " <br>uncommon elements are ";
         print_r(join(",",$array_uncommon)); 
$first=数组(2,3,5,7);
$second=数组(2,3,5,23);
$prime=“420的主要因素:”;
$scndprim=“690的主要因素:”;
foreach($key=>$value){
if(在_数组中($value,$second))
{
$prime.=''.$value.'','';
$array_common[]=$value;
}否则{
$prime.=$value.“,”;
$array_[]=$value;
}
//=========对于第二个阵列
if(在数组中($second[$key],$first))
{
$scndprim.=''.$second[$key]。'','';
}否则{
$scndprim.=$second[$key]。“,”;
$array_uncired[]=$second[$key];
}
}
回声“;
打印(修剪($prime,,');
打印(修剪($scndprim,,');
//--常见和不常见数组
echo“
常见元素为”; 打印(join(“,”,$array\u common)); echo“
不常见元素为”; 打印(join(“,”,$array_));
我找到了一种方法,但我认为这不是最有效的方法,会有更有效的答案

<?php
$factor_list_1_old = array(2, 2, 3, 5, 7);
$factor_list_2_old = array(2, 3, 5, 23);
$commons = array();
$uncommons = array();

foreach($factor_list_1_old as $key => $value){
    if(in_array($value, $factor_list_2_old)){
        array_push($commons, $value);
    }else{
        array_push($uncommons, $value);
    }
}

foreach($factor_list_2_old as $key => $value){
    if(in_array($value, $factor_list_1_old)){
        array_push($commons, $value);
    }else{
        array_push($uncommons, $value);
    }
}

var_dump(array_unique($uncommons));
var_dump(array_unique($commons));
?>

输出

$prime_420 = array(
2,
3,
5,
7
);
$prime_690 = array(
    2,
    3,
    5,
23
);

$d1 = array_diff($prime_420, $prime_690);
$d2 = array_diff($prime_690, $prime_420);    
$uncommon = array_merge($d1, $d2);
$common = array_intersect($prime_420, $prime_690);

echo "Primes of 420 : ";
for ($i = 0; $i < count($prime_420); $i++) {
    if (in_array($prime_420[$i], $uncommon)) {
        echo "<font color='#ff0000'>" . $prime_420[$i] . "</font>,";
    } else {
        echo $prime_420[$i] . ",";
    }
}
echo "<br />";
echo "Primes of 690 : ";
for ($i = 0; $i < count($prime_690); $i++) {
    if (in_array($prime_690[$i], $uncommon)) {
        echo "<font color='#ff0000'>" . $prime_690[$i] . "</font>,";
    } else {
        echo $prime_690[$i] . ",";
    }
}

如果

输出

$prime_420 = array(
2,
3,
5,
7
);
$prime_690 = array(
    2,
    3,
    5,
23
);

$d1 = array_diff($prime_420, $prime_690);
$d2 = array_diff($prime_690, $prime_420);    
$uncommon = array_merge($d1, $d2);
$common = array_intersect($prime_420, $prime_690);

echo "Primes of 420 : ";
for ($i = 0; $i < count($prime_420); $i++) {
    if (in_array($prime_420[$i], $uncommon)) {
        echo "<font color='#ff0000'>" . $prime_420[$i] . "</font>,";
    } else {
        echo $prime_420[$i] . ",";
    }
}
echo "<br />";
echo "Primes of 690 : ";
for ($i = 0; $i < count($prime_690); $i++) {
    if (in_array($prime_690[$i], $uncommon)) {
        echo "<font color='#ff0000'>" . $prime_690[$i] . "</font>,";
    } else {
        echo $prime_690[$i] . ",";
    }
}

$prime\u 420=阵列(
2.
3.
5.
7.
);
$prime_690=阵列(
2.
3.
5.
23
);
$d1=阵列差异($prime\u 420,$prime\u 690);
$d2=阵列差异($prime\u 690,$prime\u 420);
$unspecial=数组合并($d1,$d2);
$common=array\u intersect($prime\u 420,$prime\u 690);
回声“420的素数:”;
对于($i=0;$i”;
回声“690的素数:”;
对于($i=0;$i
我的功能

$array1 = array(2, 2, 3, 5, 7);
$array2 = array(2, 3, 5, 23);

function highlightFactors($factors, $other_factors)
    {
    $result = array();
    foreach ($factors as $factor)
        {
        if (($found_key = array_search($factor, $other_factors)) === false)
            {
            $result[] = array($factor, 'normal');
            }
        else
            {
            $result[] = array($factor, 'bold');
            unset($other_factors[$found_key]);
            }
        }
    return $result;
    }

echo json_encode(highlightFactors($array1, $array2));
// [[2,"bold"],[2,"normal"],[3,"bold"],[5,"bold"],[7,"normal"]]
echo json_encode(highlightFactors($array2, $array1));
// [[2,"bold"],[3,"bold"],[5,"bold"],[23,"normal"]]

我需要列出这两个。这个不行。我需要列出两个不寻常的。这个不行,420和780都不行。420中不常见的“2”不在您的列表中。420中不常见的“2”不在您的列表中。我不断从您的代码中得到错误,形式为
解析错误:语法错误,意外的“[”在…
@gtilflm中,您的php版本低于5.4。答案已更新。我必须执行数组(…)在前两行中也是如此。看来我们这里可能有一个赢家…现在正在尝试实现它。@gtilflm,当然
array()
…不要急着赢家!非常感谢!
$prime_420 = array(
2,
3,
5,
7
);
$prime_690 = array(
    2,
    3,
    5,
23
);

$d1 = array_diff($prime_420, $prime_690);
$d2 = array_diff($prime_690, $prime_420);    
$uncommon = array_merge($d1, $d2);
$common = array_intersect($prime_420, $prime_690);

echo "Primes of 420 : ";
for ($i = 0; $i < count($prime_420); $i++) {
    if (in_array($prime_420[$i], $uncommon)) {
        echo "<font color='#ff0000'>" . $prime_420[$i] . "</font>,";
    } else {
        echo $prime_420[$i] . ",";
    }
}
echo "<br />";
echo "Primes of 690 : ";
for ($i = 0; $i < count($prime_690); $i++) {
    if (in_array($prime_690[$i], $uncommon)) {
        echo "<font color='#ff0000'>" . $prime_690[$i] . "</font>,";
    } else {
        echo $prime_690[$i] . ",";
    }
}
$array1 = array(2, 2, 3, 5, 7);
$array2 = array(2, 3, 5, 23);

function highlightFactors($factors, $other_factors)
    {
    $result = array();
    foreach ($factors as $factor)
        {
        if (($found_key = array_search($factor, $other_factors)) === false)
            {
            $result[] = array($factor, 'normal');
            }
        else
            {
            $result[] = array($factor, 'bold');
            unset($other_factors[$found_key]);
            }
        }
    return $result;
    }

echo json_encode(highlightFactors($array1, $array2));
// [[2,"bold"],[2,"normal"],[3,"bold"],[5,"bold"],[7,"normal"]]
echo json_encode(highlightFactors($array2, $array1));
// [[2,"bold"],[3,"bold"],[5,"bold"],[23,"normal"]]