PHP事件和数组排序的问题,也包括布尔值的组合


PHP Issue with sorting events and arrays, also combining booleans

我认为这段代码是用来排序事件如下给我一个问题。它触发的错误是:

Notice: Undefined variable: combined in /services10/webpages/c/m/cms.norlink.ca/public/admin/new_events.php on line 941
Notice: Undefined offset: 3 in /services10/webpages/c/m/cms.norlink.ca/public/admin/new_events.php on line 893
Notice: Undefined offset: 3 in /services10/webpages/c/m/cms.norlink.ca/public/admin/new_events.php on line 895
Notice: Undefined variable: combined in /services10/webpages/c/m/cms.norlink.ca/public/admin/new_events.php on line 941
Notice: Undefined offset: 4 in /services10/webpages/c/m/cms.norlink.ca/public/admin/new_events.php on line 893
Notice: Undefined offset: 4 in /services10/webpages/c/m/cms.norlink.ca/public/admin/new_events.php on line 895
Notice: Undefined variable: combined in /services10/webpages/c/m/cms.norlink.ca/public/admin/new_events.php on line 941
Notice: Undefined offset: 5 in /services10/webpages/c/m/cms.norlink.ca/public/admin/new_events.php on line 893
Notice: Undefined offset: 5 in /services10/webpages/c/m/cms.norlink.ca/public/admin/new_events.php on line 895
Notice: Undefined variable: combined in /services10/webpages/c/m/cms.norlink.ca/public/admin/new_events.php on line 941
Notice: Undefined offset: 6 in /services10/webpages/c/m/cms.norlink.ca/public/admin/new_events.php on line 893
Notice: Undefined offset: 6 in /services10/webpages/c/m/cms.norlink.ca/public/admin/new_events.php on line 895
Notice: Undefined variable: combined in /services10/webpages/c/m/cms.norlink.ca/public/admin/new_events.php on line 941
Notice: Undefined offset: 7 in /services10/webpages/c/m/cms.norlink.ca/public/admin/new_events.php on line 893
Notice: Undefined offset: 7 in /services10/webpages/c/m/cms.norlink.ca/public/admin/new_events.php on line 895
Notice: Undefined variable: combined in /services10/webpages/c/m/cms.norlink.ca/public/admin/new_events.php on line 941
Notice: Undefined offset: 8 in /services10/webpages/c/m/cms.norlink.ca/public/admin/new_events.php on line 893

代码如下:

  function sortevents($days_events)
        {
    if (!is_array($days_events))
    {
        return array();
    }
    if (0 === ($ec=count($days_events)))
    {
        return array(); 
    }
    $neworder = array();
    $oldorder_used = array();
    $allordered = false;
    for ($i = 0; $i <= $ec; $i++)
    { 
        $oldorder_used[$i] = false; 
    }
    $i = 0;
    $sd = null;
    $si = -1;
    $ei = 0;
    while (!$allordered)
    {
        if ((null == $sd || $sd > $days_events[$i]['startint']) && !$oldorder_used[$i])
        {
            $sd = $days_events[$i]['startint'];
            $si = $i;
        }
        else
        {
            $i++;
            continue;
        }
        if ($i === ($ec-1))
        {
            $oldorder_used[$si] = true;
            $neworder[$ei] = $days_events[$si];
            $ei++;
            $i = 0;
        }
        $i++;
        $allordered = combinebooleans($oldorder_used);
    }
}
//takes an array of booleans and combines them
function combinebooleans($arr_bools)
{
    //if not an array of booleans
    if (!is_array($arr_bools))
    {
        //if not a boolean
        if (!is_bool($arr_bools)) 
        { 
            return false; 
        }
        //if it is a boolean then lets return it
        else 
        { 
            return $arr_bools; 
        }
    }
    else
    {
        //variable to hold combined booleans
        $combined;
        //cycle through the array of booleans and 
        foreach ($arr_bools as $curb) 
        { 
            $combined = $combined | $curb; 
        }
        return $combined;
    }
}

如果您将events存储在SQL DATABASE中,最好的排序方法是使用ORDER BY

如果你必须在php上排序,你可能可以使用usort:

usort($array,function($eventA,$eventB)){
    //your own logic *
    return $comparisonResult;
});

*这个函数应该返回

  • -1或其他小于0的值如果$eventA应该在$eventB之前
  • 1或其他小于0的值如果$eventA应该在$eventB之后
  • 0聪明过分的