为什么这个php数组排序函数会生成警告

时间:2016-06-13 22:06:55

标签: php arrays sorting

我在php手册网站上找到了一个数组排序功能,它完全符合我的要求,但它会产生警告,我一直试图弄清楚为什么以及如何阻止它们。任何建议都很有用。

function fnArrayOrderby(){
//function to sort a database type array of rows by the values in one or more column
//source http://php.net/manual/en/function.array-multisort.php - user notes
//example of use -> $sorted = fnArrayOrderby($data, 'volume', SORT_DESC, 'edition', SORT_ASC);

$args = func_get_args(); //Gets an array of the function's argument list (which can vary in length)
//echo "sorting on ".$args[1];
$data = array_shift($args); //Shift an element off the beginning of array
foreach ($args as $n => $field) {
    if (is_string($field)) {
        $tmp = array();
        foreach ($data as $key => $row)
            $tmp[$key] = $row[$field];
        $args[$n] = $tmp;
        }
}
$args[] = &$data;
call_user_func_array('array_multisort', $args);
 return array_pop($args);
}

生成的警告是

  • PHP警告:为..中的foreach()提供的参数无效 line“foreach($ data as $ key => $ row)”
  • PHP警告: array_multisort():参数#5应该是一个数组或排序 flag ... for call_user_func_array('array_multisort',$ args)

1 个答案:

答案 0 :(得分:0)

我现在已经解决了 - 感谢评论,特别是来自@rivimey的评论让我意识到函数本身可能没有任何问题,而是它被调用的方式。事实证明,当函数应用于未设置的数组时,会生成警告。例如,我使用该函数对与数据库条目关联的图像数组进行排序,但如果没有图像,则不设置该数组。 所以我现在在函数中添加了以下行     if(!isset($ args [0])){return;}
谢谢你的帮助!