php array_unique returns 空数组取决于服务器
php array_unique returns empty array depending on server
我有一行代码在我的本地开发机器上运行但在另一台机器上无法运行(如预期的那样)。
这是我对 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_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]=>字符串(12)“~tim_Time_To”[8]= > 字符串(14)“~tim_Time_From”[9]=> 字符串(12)“~tim_Time_To”}
在没有找到上述问题的解决方案后,我开始寻找是否有解决方法 - 以另一种方式对此进行编码。
我找到的解决方法:
对于所有实例:
array_unique($parameters, SORT_REGULAR)
替换为:
array_unique($parameters)
我不确定这种修改后的行为是什么,虽然乍一看它似乎产生了我想要的结果。为了明确地检查这个变化会做什么,我参考了手册并发现了这个:
"Added the optional sort_flags defaulting to SORT_REGULAR. Prior to 5.2.9, this function used to sort the array with SORT_STRING internally. "
所以根本原因是在第二台服务器上,运行 5.0.3,不支持可选的标志参数。
我有一行代码在我的本地开发机器上运行但在另一台机器上无法运行(如预期的那样)。
这是我对 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_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]=>字符串(12)“~tim_Time_To”[8]= > 字符串(14)“~tim_Time_From”[9]=> 字符串(12)“~tim_Time_To”}
在没有找到上述问题的解决方案后,我开始寻找是否有解决方法 - 以另一种方式对此进行编码。
我找到的解决方法:
对于所有实例:
array_unique($parameters, SORT_REGULAR)
替换为:
array_unique($parameters)
我不确定这种修改后的行为是什么,虽然乍一看它似乎产生了我想要的结果。为了明确地检查这个变化会做什么,我参考了手册并发现了这个:
"Added the optional sort_flags defaulting to SORT_REGULAR. Prior to 5.2.9, this function used to sort the array with SORT_STRING internally. "
所以根本原因是在第二台服务器上,运行 5.0.3,不支持可选的标志参数。