php array_unique возвращает пустой массив в зависимости от сервера
У меня есть строка кода, которая работала на моей локальной машине разработки, но не работает (как ожидалось) на другой машине.
Вот моя отладка вызова array_unique:
debug("Parameter array size: ".sizeof($parameters));
debug("Sorted array size: ".sizeof(array_unique($parameters, SORT_REGULAR)));
debug_r($parameters);
debug_r(array_unique($parameters, SORT_REGULAR));
(Я кодировал функции debug и debug_r для вывода ввода, но хорошо отформатирован.)
Результаты:
Parameter array size: 10
Sorted array size: 0
Array ( [0] => ~oli_Search_Term [1] => ~oli_Search_Term [2] => ~oli_Search_Term [3] => ~oli_Search_Term [4] => ~tim_Time_From [5] => ~tim_Time_To [6] => ~tim_Time_From [7] => ~tim_Time_To [8] => ~tim_Time_From [9] => ~tim_Time_To )
Обратите внимание - ничего не выводится для этого последнего вызова отладки (предназначенного для вывода содержимого array_unique($parameters, SORT_REGULAR).
Почему массив пуст (и только на одной машине)?
Машина, на которой вывод пуст, работает под управлением PHP версии 5.0.3.
Добавление следующего:
vardump($parameters);
... дает:
array (10) {[0] => string (16) "~ oli_Search_Term" [1] => string (16) "~ oli_Search_Term" [2] => string (16) "~ oli_Search_Term" [3] => строка (16) "~oli_Search_Term" [4]=> строка (14) "~tim_Time_From" [5]=> строка (12) "~tim_Time_To" [6]=> строка (14) "~tim_Time_From" [7]=> string(12) "~tim_Time_To" [8]=> string(14) "~tim_Time_From" [9]=> string(12) "~tim_Time_To" }
1 ответ
Не найдя решения вышеупомянутого вопроса, я начал видеть, есть ли обходной путь - кодировать это по-другому.
Обходной путь, который я нашел:
Для всех случаев:
array_unique($parameters, SORT_REGULAR)
Заменить:
array_unique($parameters)
Я не был уверен относительно того, каким будет это измененное поведение, хотя с первого взгляда казалось, что оно дает желаемый результат. Чтобы явно проверить, что будет делать это изменение, я обратился к руководству и обнаружил следующее:
"Добавлен необязательный параметр sort_flags по умолчанию для SORT_REGULAR. До 5.2.9 эта функция использовалась для внутренней сортировки массива с помощью SORT_STRING. "
Таким образом, основной причиной было то, что на втором сервере, работающем 5.0.3, необязательный аргумент flag не поддерживается.