Почему эти массивы не совпадают?

Вопрос:

Я пытаюсь сопоставить элементы массива, и я понял, что даже если элементы внутри массивов полностью совпадают, они не совпадают друг с другом.

Первый массив:

  $json = '{
"address1": "1818 Grove View",
"address2": "605",
"country": "USA",
"city": "San Diego",
"postcode": "91913",
"contact_name": "Natasha",
"contact_email": "[email protected]",
"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, и я выполняю модульное тестирование. Я $decodedOutput POST-маршрут в URI адреса, который передает строку $json и $decodedOutput получает контент и декодирует его. Я поместил все элементы в $decodedOutput в массив с именем $arrayOutputs

Если я var_dump оба массива, вот что я получаю: 1-й массив:.array(8) {[0] => string (6) “91913” [1] => string (19) “1818 Grove View” [2] => строка (25) “605” [3] => строка (9) “США” [4] => строка (9) “Сан-Диего” [5] => строка (9) “Наташа” [6] => строка (19) “[email protected]” [7] => строка (8) “6138883849”}

Второй массив: массив (10) {[0] => массив (0) {} [1] => массив (1) {[0] => int (74)} [2] => array (1) {[ 0] => string (6) “91913”} [3] => array (1) {[0] => string (6) “1818 Grove View”} [4] => array (1) {[0] => string (25) “605”} [5] => array (1) {[0] => string (9) “USA”} [6] => array (1) {[0] => string ( 9) “Сан-Диего”} [7] => массив (1) {[0] => строка (9) “Наташа”} [8] => массив (1) {[0] => строка (19) ” [email protected] “} [9] => array (1) {[0] => string (8)” 6198883849 “}}

Теперь очевидно, что есть некоторые различия в форматировании, но они все еще массивы. Итак, следующее, что я сделал, это проверить, действительно ли они разные:

 if($arrayOutputs[2] === $dataArray[0])
{
echo "Match";
}
else
{
echo "Doesn't Match";
}

Я взял два элемента из каждого массива, которые, как я знаю, имеют одни и те же элементы, и когда я запускаю код, я всегда получаю, что они не совпадают. Почему они разные?

Лучший ответ:

$arrayOutputs[2] – это массив

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

Ответ №1

При создании второго массива замените

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

с

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

Оцените статью
TechArks.Ru
Добавить комментарий