如何以相同的方式创建的两个数组变得不同?

时间:2013-12-23 01:49:23

标签: php ajax arrays

两个数组的var_dumps不同,但它们的创建方式完全相同。这是为什么?????

第一个数组转储:

    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";

1 个答案:

答案 0 :(得分:1)

问题:

目前,您将逗号分隔的字符串发送到fileB.php

$iStateValues[] = $_GET["istate"] ;

$_GET["istate"]包含以逗号分隔的字符串,在上面的语句中,您将值推送到空数组$iStateValues

现在,在fileB.php中,您使用$currentiState循环创建另一个数组while。然后你试着比较它们。

$iStateValues是一个字符串,不是数组$currentiState是一个真正的数组。因此,比较将始终返回FALSE

如何解决问题:

不是将逗号分隔的字符串发送到fileB.php,而是发送实际的JSON字符串。所以你的代码看起来像:

js_str=<? echo json_encode($iState); ?>;
xmlhttp.open("GET","fileB.php?istate="+ js_str,true);
xmlhttp.send();

现在,在fileB.php中,您可以接收JSON字符串,然后对其进行解码,如下所示:

$jsonArray = json_decode($_GET['istate'], true);

JSON解码中的第二个参数表示它应该被解码为关联数组而不是对象。)

然后进行比较。