PHP嵌套不同长度的循环

时间:2016-11-12 12:00:00

标签: php arrays for-loop

我有两个数组:

$Array1 = array (1,3,4,6,8);
$Array2 = array (1,2,3,4,5,6,7,8,9);

我想比较两个数组。如果array1和array2中的数据具有相同的值,那么我想显示" sama",否则" tidak sama"。

所以后来这样的结果。

1 sama, 2 tidak sama, 3 sama, 4 sama, 5 tidak sama, 6 sama, 7 tidak sama, 8 sama, 9 tidak sama

我试图这样做:

<?php
    $array1 = array(1,3,4,6,8);
    $array2 = array(1,2,3,4,5,6,7,8,9);

    $a = array();

    for ($i=0; $i < count($array2) ; $i++) { 
        for ($x=0; $x < count($array1); $x++) {  
            if ($array1[$x] == $array2[$i]) {
                $a[$i] = $i." sama"; 
            } else {
                $a[$i] = $i." gak sama";
            }
        }
    }

    echo json_encode($a);
?>

但结果是这样的:

["0 gak sama","1 gak sama","2 gak sama","3 gak sama","4 gak sama","5 gak sama","6 gak sama","7 sama","8 gak sama"]

那么,我该怎么办?感谢

4 个答案:

答案 0 :(得分:2)

你试图这样做很好。虽然有更有效的方法,但代码的问题在于您反复覆盖$a[N]。要解决此问题,只需添加break语句。

$a[$i] = $i." sama"; 
break; // add this 

答案 1 :(得分:0)

您实际上可以减少循环并使用in_array函数来检查第二个数组中是否存在元素。     

    $a = array();

    for ($i=0; $i < count($array2); $i++) {
        $j = $i + 1;
        if (in_array($array2[$i], $array1, true)) {
            $a[$i] = $j . " sama";  
        } else {
            $a[$i] = $j . " gak sama";
        }
    }

    echo json_encode($a);
?>

答案 2 :(得分:0)

不需要嵌套循环,并且对于所需的输出,还必须检查较短的数组中是否存在相应的项目。

<?php
    $array1 = array(1,3,4,6,8);
    $array2 = array(1,2,3,4,5,6,7,8,9);

    $a = array();

    for ($i=0; $i < count($array2) ; $i++) { 
        if (isset($array1[$i]) && $array1[$i] == $array2[$i]) {
            $a[$i] = ($i + 1)." sama"; 
        } else {
            $a[$i] = ($i + 1)." tidak sama";
        }
    }

    echo json_encode($a);
?>

输出:

["1 sama","2 tidak sama","3 tidak sama","4 tidak sama","5 tidak sama","6 tidak sama","7 tidak sama","8 tidak sama","9 tidak sama"]

答案 3 :(得分:0)

我会使用内置array_intersect()array_diff等功能。

$array1 = array(1,3,4,6,8);
$array2 = array(1,2,3,4,5,6,7,8,9);

$intersection = array_intersect($array1, $array2);
$diff = array_diff($array2, $array1);

$result = array();
foreach ($intersection as $value) {
    $result[$value] = $value . ' sama';
}
foreach ($diff as $value) {
    $result[$value] = $value . ' tidak sama';
}
ksort($result);

echo implode(', ', $result);

http://rextester.com/QHSV17063