使用ajax时出现数组问题

时间:2013-12-23 01:15:27

标签: php ajax arrays

我正在尝试使用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不同,但它们的创建方式完全相同。这是什么?????

2 个答案:

答案 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

“==”检查相同的元素,“===”检查正确的顺序。所以在你的情况下,'==='会提供正确答案。