PHP - Не удается получить ожидаемые результаты с оператором сравнения == - PullRequest
0 голосов
/ 21 марта 2011

С этим кодом:

if($foo['bar'] == $baz) {
    $results[] = $foo;
}

Я никогда не достигаю назначения $results[] = $foo; (с определенным значением)

Теперь, если я это сделаю (с этим же, определенным значением):

strcmp(trim($foo['bar']), trim($baz));

Я получаю результат 0, указывающий, что строки фактически равны. Итак ... почему в мире я не могу достичь $results[] = $foo;?

Не должно ли $ foo ['bar'] == $ baz быть истинным, если strcmp из двух равен 0? Чего мне не хватает?


Кстати, проваливается только одно конкретное сравнение. Другие сравнения, использующие тот же оператор if, будут работать нормально.

пример:

когда $ foo ['bar'] == 'meat' и $ baz == 'meat', я получаю результаты $ ['meat']

но когда $ foo ['bar'] == 'мясной соус' и $ baz == 'мясной соус', я получаю $ результаты []

Ответы [ 2 ]

2 голосов
/ 21 марта 2011

Наблюдаемое поведение не имеет смысла, поэтому где-то должна быть скрытая ошибка. Давайте начнем с того, что trim, кажется, заставляет его работать.

Использовали ли вы var_dump для проверки того, что $foo['bar'] и $baz действительно имеют одинаковое значение?

0 голосов
/ 21 марта 2011

Если у вас есть буксирные массивы, скажите A и B, и вы хотите присвоить массив B A, вы сделаете это:

$A = $B;

, если вы хотите использовать только один элемент:

$A[] = $B[5]; // ether by index or key

в вашем случае вы пытались присвоить весь массив элементу из массива, попробуйте это:

$results[] = $foo['bar'];

В случае, если вы хотите назначить весь массив, сделайте так:

$results['key1'] = $foo[];

Каждый ключ в массиве результатов будет содержать массив.

...