【问题标题】:Why don't these arrays match?为什么这些数组不匹配?
【发布时间】: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


【解决方案1】:

$arrayOutputs[2] 本身就是一个数组

if($arrayOutputs[2][0] === $dataArray[0])
                   ^^^ add this

【讨论】:

  • 完美。得到它匹配。
【解决方案2】:

在构建第二个数组时,替换

foreach($decodedOutput as $dOpt){
    $arrayOutputs[] = array($dOpt);
}

foreach($decodedOutput as $dOpt){
    $arrayOutputs[] = $dOpt;
}

【讨论】:

  • 这是正确的答案,因为它解决了真正的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-09
  • 2018-03-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-02
  • 2014-12-05
相关资源
最近更新 更多