在For循环中对对象数组进行排序

时间:2013-03-12 13:48:34

标签: php arrays sorting foreach usort

Hello All我有一个多数组。我正在使用这样的代码。

它可以在没有循环的情况下进行测试。当我在循环中调用它时它在ajax调用中显示内部服务器。并没有给我任何回应。

         function sortarraybykey_returns($oldarray)
                   {


  if (count($oldarray) > 1)
    {

        function cmpreturns($a, $b)
        {
            if ($a->staff_distance_value < $b->staff_distance_value)
            {
                return -1;
            } elseif ($a->staff_distance_value == $b->staff_distance_value)
            {
                return 0;
            } else
            {
                return 1;
            }
        }

        usort($oldarray, "cmpreturns");
    }

    return $oldarray;
}

 Array
(
    [0] => stdClass Object
        (
            [ID] => 1
            [name] => Mary Jane
            [count] => 420
        )

    [1] => stdClass Object
        (
            [ID] => 2
            [name] => Johnny
            [count] => 234
        )

    [2] => stdClass Object
        (
            [ID] => 3
            [name] => Kathy
            [count] => 4354
        )

1 个答案:

答案 0 :(得分:1)

您已在函数中定义了一个函数。由于函数只能定义一次,因此第二次调用sortarraybykey_returns将导致致命错误(Fatal error: Cannot redeclare cmpreturns())。这很可能是你遇到的问题。尝试在cmpreturns之外定义sortarraybykey_returns

function cmpreturns($a, $b)
{

  if ($a->staff_distance_value < $b->staff_distance_value)
  {
      return -1;
  }

  elseif ($a->staff_distance_value == $b->staff_distance_value)
  {
      return 0;
  }

  else
  {
      return 1;
  }

}

function sortarraybykey_returns($oldarray)
{

  if (count($oldarray) > 1)
  {
    usort($oldarray, "cmpreturns");
  }

  return $oldarray;

}