我有两个数组:
$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"]
那么,我该怎么办?感谢
答案 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);