这个程序的任何其他更好的逻辑

时间:2017-06-14 18:00:05

标签: php logic

今天在一次采访中,我得到了以下问题,无需使用任何内置函数,例如in_array等。我能够解决该程序,但他们告诉我有更好的方法,他们告诉我总代码只是最多7行。所以任何人都可以告诉我任何比这更好的方法: -

<?php
$a = array(1,3,5,2,1,5,11,16);
$b = array(1,4,3,11,12,5,7,18);
$final = [];
for($i=0;$i<count($a);$i++){
    $flag = 0;
    if($i==0){
        $final[] = $a[$i];
    } else {
        for($j=0;$j<count($final);$j++){

            if($a[$i] == $final[$j]){
                $flag = 1;
            }

        }
        if($flag==0){
            $final[] = $a[$i];
        }
        for($k=0;$k<count($final);$k++){
            if($b[$i] == $final[$k]){
                $flag = 1;
            }
        }
        if($flag==0){
            $final[] = $b[$i];
        }


    }

}
echo '<pre>';
print_r($final);

结果将是包含两个唯一数组的最终数组,例如

Array ( [0] => 1 [1] => 3 [2] => 4 [3] => 5 [4] => 2 [5] => 11 [6] => 16 [7] => 18 )

2 个答案:

答案 0 :(得分:2)

以下是如何在不使用内置函数的情况下执行此操作:将值作为键收集(因此它们是唯一的),然后将这些键作为值放回到最终数组中:

$a = array(1,3,5,2,1,5,11,16);
$b = array(1,4,3,11,12,5,7,18);

foreach($a as $v) $keys[$v] = 1;
foreach($b as $v) $keys[$v] = 1;
foreach($keys as $k => $v) $final[] = $k;

echo '<pre>';
print_r($final);

eval.in上看到它。

答案 1 :(得分:1)

只需将密钥设置为值,它们就会覆盖。如果数组的长度相同:

/Users/<user_name>/Library/Android/sdk/

如果没有,则为每个阵列执行:

foreach($a as $k => $v) {
    $final[$v] = $v;
    $final[$b[$k]] = $b[$k];
}

订单和密钥不一样,但并未作为要求说明。