Мне было интересно, почему функция сравнения array_uintersect_assoc, которая «должна возвращать целое число меньше, равно или больше нуля, если первый аргумент считается соответственно меньше, равен или больше второго» (http://php.net/manual/en/function.array-uintersect-assoc.php). Когда я сравниваю два массива, мне нужно только логическое значение: элементы либо совпадают, либо не совпадают.
Какова реальная причина такого поведения?
Функция была реализована таким образом, чтобы позволить использовать «классические» функции сравнения, которые используют такую стратегию возврата. Такая функция обычно должна быть в состоянии выразить три случаи, которые невозможны с логическим возвращаемым значением по очевидным причинам.
Вы можете, однако, также использовать функцию сравнения, которая делает верните логический результат, так как php как слабый типизированный язык автоматически преобразует его для вас. Взгляните на этот пример, который является слегка модифицированной версией, приведенной в документации по функции:
<?php
function mystrcasecmp($a, $b) {
return strcasecmp($a, $b) ? true : false;
}
$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "GREEN", "B" => "brown", "yellow", "red");
print_r(array_uintersect_assoc($array1, $array2, "mystrcasecmp"));
Вы можете видеть, что используемая здесь функция сравнения возвращает логическое значение, но результат точно такой же.
Итог: существующая реализация является более гибкой, в то же время позволяя использовать функцию сравнения, возвращающую также логический результат.
Других решений пока нет …