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 не поддерживается.

Другие вопросы по тегам