我正在尝试使用ajax来比较两个数组以查看特定值集是否相同,因此我用相同的值填充两个数组,当我测试它们时,我的测试表明它们不相同。第一个数组是在fileA.php上创建的(使用while循环直接从数据库中提取)并使用ajax将其作为url变量发送到fileB.php(响应文件)。在fileB.php上,我然后使用$ _GET来获取数组,并使用while循环创建另一个数组,直接从数据库中提取完全相同的值并比较两者。此时两个数组应该是相同的,但正如我之前所说,我的测试表明它们不是。所以我做了两个数组的var_dump,但由于某种原因它们看起来不同。
第一个数组转储:
array(2) {
[0]=>
array(0) {
}
[1]=>
string(6) ",2,2,1"
}
第二个数组转储:
array(3) {
[0]=>
array(0) {
}
[1]=>
string(1) "2"
[2]=>
string(1) "2"
[3]=>
string(1) "1"
}
数组1在fileA.php上生成
while ($row = mysql_fetch_assoc($res))
{
$iState[] = $row["state"];
}///end while
然后我使用ajax发送到fileB.php
js_array=<? echo json_encode($iState); ?>;
var url_js_array=js_array.join(',');
xmlhttp.open("GET","fileB.php?istate="+ url_js_array,true);
xmlhttp.send();
然后在fileB.php(ajax响应文件)中检索数组
$iStateValues[] =$_GET["istate"] ;
然后我在fileB.php上创建数组2
while ($row = mysql_fetch_array($res))
{
$currentiState[]= $row["state"];
}///end while
然后我将两个
进行了比较 echo"\n\nsame test\n";
if($iStateValues==$currentiState)
echo "same";
else
echo "not same";
两个数组的var_dumps不同,但它们的创建方式完全相同。这是什么?????
答案 0 :(得分:-1)
实际上你的阵列不一样。你的第一个数组(比方说$arr1
)有2个元素,而你的第二个数组(比如$arr2
)中有4个元素。
当然,两个数组的第一个元素(即$arr1[0]
和$arr2[0]
)都是一个空数组,而且这部分数组是相似的。
现在,第一个数组的剩余部分(即$arr1[1]
)是一个字符串:",2,2,1"
,而第二个数组的剩余部分是更多数组值:2, 2, 1
并且是不是一个字符串。
即:
$arr1[1] #=> string: ,2,2,1
$arr2[1] #=> string: 2
$arr2[2] #=> string: 2
$arr2[3] #=> string: 1
因此,您可以清楚地看到两个阵列不相等。
您可以使用===
运算符比较两个数组的相等性(保留顺序),如下所示:
$arr1 === $arr2 #=> false
如果您只想检查两个数组是否具有相同的值(无论其顺序如何),您应该使用==
运算符。
答案 1 :(得分:-1)
您的数组不相同,因为您在代码中修改了它们!
PHP:
// This is not an array, but a json string
js_array=<? echo json_encode($iState); ?>;
JS:
// Just pass the whole json string and don't use join!
xmlhttp.open("GET","fileB.php?istate="+ url_js_array,true);
xmlhttp.send();
PHP:
// Create an array again with json_decode
$iStateValues[] = json_decode($_GET["istate"]);
关于第二个问题,这就是你如何比较PHP中的数组:
$array1 = array(1, 2, 3); // This is the same like $array1 = array(0 => 1, 1 => 2, 2 => 3);
$array2 = array(1, 2, 4);
$array3 = array(3, 2, 1);
var_dump($array1 == $array2); // false
var_dump($array1 == $array3); // false
var_dump($array2 == $array3); // true
var_dump($array1 === $array2); // false
var_dump($array1 === $array3); // false
var_dump($array2 === $array3); // false
“==”检查相同的元素,“===”检查正确的顺序。所以在你的情况下,'==='会提供正确答案。