Почему два значения массива выглядят одинаково, но не оцениваются как равные? - PullRequest
0 голосов
/ 15 апреля 2010

Когда я сравниваю два значения массива, я вижу две строки, которые выглядят одинаково. php не согласен.

$array1 = array('address'=>'32 Winthrop Street','state'=>'NY');
$array2 = array('address'=>'32 Winthrop Street');

$results = array_diff_assoc($array1, $array2);

var_dump($results) 
//echos ['address'] => string(18) "32 Winthrop Street" ['state']=>'NY'

Почему это?

EDIT Имейте в виду, что это не тот код, который я тестирую, я упростил код, чтобы проиллюстрировать мой вопрос, касающийся равенства строк, а не того, будет ли этот код выполняться.

Ответы [ 4 ]

8 голосов
/ 15 апреля 2010

Первое: ваш код даже не запустится, но умрет в синтаксической ошибке в строке 2. Вот исправленная версия:

<?php
$array1 = array ('address'=>'32 Winthrop Street','state'=>'NY');
$array2 = array ('address'=>'32 Winthrop Street');

$results = array_diff_assoc($array1, $array2);

var_dump($results); 

Второе: я протестировал это с PHP 5.2.12 и 5.3.1, и это работает. Отголоски:

array(1) {
  ["state"]=>
  string(2) "NY"
}

Это действительно просто полный неверный синтаксис. Вот и все.

5 голосов
/ 15 апреля 2010

Убедитесь, что ваши входные массивы действительно выглядят так. Если вы отображаете данные в своем браузере, вы можете пропустить пробел. Например, '32 Winthrop Street' - это не то же самое, что ' 32 Winthrop Street'. То же самое верно и для ключей массива.

Вы можете $array1 = array_map('trim', $array1) и $array2 = array_map('trim', $array2) удалить начальные и конечные пробелы из значений. Посмотрите, имеет ли это какое-то значение?

Вы можете проверить, действительно ли они одинаковы, отметив if ($array1['address'] === $array2['address']). Если значение равно false, разница есть, вы просто ее не видите (см. ответ binaryLV для уточнения возможной причины). Если он принимает значение true, возможно, вы захотите поближе взглянуть на ключи массива.

3 голосов
/ 15 апреля 2010

Значения жестко запрограммированы или получены из какого-либо другого источника? Что дает var_dump($array1['address'], $array2['address'])? Может быть, где-нибудь есть "невидимые" пробелы?

0 голосов
/ 15 апреля 2010
$array1 = ('address'=>'32 Winthrop Street','state'=>'NY');
$array2 = ('address'=>'32 Winthrop Street');

$results = array_diff_assoc($array1, $array2); // remove the ' on this line 

', вероятно, вводит в заблуждение движок PHP, заставляя его думать, что это строка ... затем добавьте оскорбление, если вы не закроете "строку".

Выглядит как опечатка для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...