【发布时间】:2014-09-14 11:25:23
【问题描述】:
我正在尝试匹配数组元素,但我意识到即使数组中的元素完全相同,它们也会相互不匹配。
第一个数组:
$json = '{
"address1": "1818 Grove View",
"address2": "605",
"country": "USA",
"city": "San Diego",
"postcode": "91913",
"contact_name": "Natasha",
"contact_email": "nsr@yahoo.com",
"contact_number": "6198883849"
}';
$data = json_decode($json, true);
$address1 = $data['address1'];
$address2 = $data['address2'];
$country = $data['country'];
$city = $data['city'];
$postcode = $data['postcode'];
$contactName = $data['contact_name'];
$contactEmail = $data['contact_email'];
$contactNumber = $data['contact_number'];
$dataArray[] = array($postcode, $address1, $address2, $city, $country,$contactName, $contactEmail, $contactNumber);
第二个数组:
$this->call('POST', 'address', array(), array(), array(), $json);
$this->assertFalse($this->client->getResponse()->isOk());
$decodedOutput = json_decode($this->client->getResponse()->getContent());
$arrayOutputs[]= array();
foreach($decodedOutput as $dOpt){
$arrayOutputs[] = array($dOpt);
}
为了解释上面的代码,我正在使用 Laravel 并且正在做单元测试。我正在调用一个 POST 路由到传递 $json 字符串的地址 URI,$decodedOutput 接收内容并对其进行解码。我将$decodedOutput 中的所有元素放入一个名为$arrayOutputs 的数组中
如果我 var_dump 两个数组,这就是我得到的: 第一个数组: .array(8) { [0] => 字符串(6)“91913” [1] => string(19) "1818 格罗夫景观" [2] => 字符串(25)“605” [3] => 字符串(9)“美国” [4] => string(9) "圣地亚哥" [5] => 字符串(9)“娜塔莎” [6] => 字符串(19)“nsr@yahoo.com” [7] => 字符串(8)“6138883849” }
第二个数组: 数组(10){ [0] => 数组(0){ } [1] => 数组(1){ [0] => 整数(74) } [2] => 数组(1){ [0] => 字符串(6)“91913” } [3] => 数组(1){ [0] => string(6) "1818 格罗夫景观" } [4] => 数组(1){ [0] => 字符串(25)“605” } [5] => 数组(1){ [0] => 字符串(9)“美国” } [6] => 数组(1){ [0] => string(9) "圣地亚哥" } [7] => 数组(1){ [0] => 字符串(9)“娜塔莎” } [8] => 数组(1){ [0] => 字符串(19)“nsr@yahoo.com” } [9] => 数组(1){ [0] => 字符串(8)“6198883849” } }
现在显然在格式上有一些差异,但它们仍然是数组。所以接下来我要做的是检查它们是否真的不同:
if($arrayOutputs[2] === $dataArray[0])
{
echo "Match";
}
else
{
echo "Doesn't Match";
}
我从每个数组中提取了两个我知道具有相同元素的元素,当我运行代码时,我总是得到它们不匹配的结果。为什么它们不同?
【问题讨论】:
-
从输出中,似乎第二个数组元素是另一个数组。您是否尝试打印这些元素(确切地说是那些,而不是整个数组)或至少为它们使用 gettype?
-
@FuzzyTree 我实际上并没有尝试检查一个数组是否与另一个数组匹配。我实际上是在尝试比较每个数组中的特定元素。
-
抱歉,您构造该数组的方式只是一个Oh God Why?! 时刻。您的许多重复代码行几乎与此相同:
$dataArray[] = array_values($data); -
=== 检查类型。数组本身不能与数组中的元素相同。
-
@BojanKovacevic 我刚刚做了一个 gettype() 并且它们都以 string(5) "array" string(5) "array" 的形式出现
标签: php arrays laravel-4 phpunit