Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较php和javascript中的数组会返回两个不同的值。为什么?_Javascript_Php_Arrays - Fatal编程技术网

比较php和javascript中的数组会返回两个不同的值。为什么?

比较php和javascript中的数组会返回两个不同的值。为什么?,javascript,php,arrays,Javascript,Php,Arrays,伙计们,有件事真的困扰着我 在JavaScript中,数组是对象,这意味着每个数组都为该数据类型分配了一段内存 因此,当 arr1 = [1,2,3] arr2 = [1,2,3] arr1 == arr2 returns false 然而 在php中,相同的场景返回true 为什么会这样。这就是为什么在Javascript中返回false的原因: 创建这两个阵列时: arr1 = [1,2,3]; arr2 = [1,2,3]; 实例化2个不同的数组对象。因此,即使它们具有相同的元素,它

伙计们,有件事真的困扰着我

在JavaScript中,数组是对象,这意味着每个数组都为该数据类型分配了一段内存

因此,当

arr1 = [1,2,3]
arr2 = [1,2,3]

arr1 == arr2 returns false
然而

在php中,相同的场景返回true


为什么会这样。

这就是为什么在Javascript中返回false的原因:

创建这两个阵列时:

arr1 = [1,2,3];
arr2 = [1,2,3];
实例化2个不同的数组对象。因此,即使它们具有相同的元素,它们也不是相同的对象,因此返回false

如果只创建一个对象并将
引用
复制到另一个变量,如下所示:

var arr1 = [1,2,3];
var arr2 = arr1
(arr1 == arr2) //returns true
它将返回true,因为它们对同一对象([1,2,3])有引用

我认为您对O.O.很熟悉,如果不是这样,请看一下:

因此,如果需要比较数组中的每个元素是否等于同一索引中的另一个元素,请使用@Prafulla Kumas Sahu提到的本机函数
every()

下面是一个简单的示例,说明如何使用
every()
比较两个数组是否具有相同的元素:

PHP中,对于PHP语言中的数组,有额外的
native
运算符。他们可以检查:

  • $a+$b由$a和$b组成的联合体
  • 如果$a和$b具有相同的键/值对,则$a==$b相等TRUE
  • 如果$a和$b具有相同顺序和相同类型的相同键/值对,则$a====$b标识为TRUE
  • $a!=$如果$a不等于$b,则b不相等为真
  • 如果$a不等于$b,则$a$b不平等为真
  • $a!==$b如果$a与$b不相同,则为非标识TRUE
因此,在javascript中它是false,因为操作符=检查数组对象的
实例是否对另一个对象具有相同的
引用


PHP中是true,因为数组有
额外的操作符,操作符==检查两个不同的数组是否有相同的对值。

和===将变量视为字符串,因此通过执行$ar1.toString()==$ar2.toString(),您可以在js中对其进行比较。如果元素的顺序不一样,它将无法工作。当您在js中比较两个数组时,您可以使用它来解决此问题。这是一个非常好的解释,谢谢@tfidelis,但我认为OP理解这一点,但是PHP呢?PHP也是这样吗?如果是,为什么PHP在相同的场景中返回true?感谢您的解释。但问题是,为什么在PHP中比较两个对象数组时返回值为真?或者在PHP中,它们不是对象数组,而是基本值。。嗯…@johnbrian你是对的,我将编辑答案并告诉你为什么在php中是正确的。那么所有语言中的数组都是对象数组?它们不是原始数据类型,对吗?是的,每种语言都以自己的方式实现。有自己的处理方法、操作符等。数组的概念是相同的。
var arr1 = [1,2,3];
var arr2 = [1,2,3];

arr1.every(function(value, index){
    return value == arr2[index];
}); 
//returns true