1

在 xampp 开发环境中使用 PHP 5.4.7。

我的数据层文件中有一个函数,它从 MySql 表中获取数据,然后创建一个二维数组,以便我以后可以访问内容。当我使用 print_r 打印出此数据层文件本身中的元素时,它们以正确的索引顺序打印,即 0、1、2、3、4、5。但是当我在其他地方调用此函数并打印元素时,它们按 5、0、1、2、3、4 的顺序出现。

切换肯定发生在函数创建时间和使用时间之间。我已经搜索了所有内容,但没有在论坛上找到类似的内容。

这是功能:

function getAllActivitiesAtEvent($eventId)
{
    $query = ("SELECT * FROM activity WHERE '$eventId' = activity.event_id");
    $result = @mysql_query ( $query ) or die ( mysql_error () );
    $num = mysql_num_rows ( $result );
    if ($num != 0)
    {
        $allActs[$num-1] = array();
        $i = 0;
        while ( $row = mysql_fetch_array ( $result ) ) 
        {
            $oneAct = [ 
            "index" => $i,
            "actId" => $row ['activity_id'], 
            "actName" => $row ['activity_name'], 
            "actSC" => $row ['activity_short_code'], 
            "actPL" => $row ['project_leader'],
            "actCap" => $row ['capacity'], 
            "actDOW" => $row ['day_of_week'], 
            "actDate" => $row ['date']
            ];
            $allActs[$i] = $oneAct;
            $i++;
        }$i = 1;
    }
    return $allActs;
}

...当我在此页面上 print_r 时,顺序是正确的。

当我在另一个页面上调用此函数时,如下所示:

dbconnect();
$activityArr = getAllActivitiesAtEvent($eventId);

然后打印出元素,顺序不对!

4

2 回答 2

0

尝试:

function getAllActivitiesAtEvent($eventId)
{
    $query = ("SELECT * FROM activity WHERE '$eventId' = activity.event_id");
    $result = @mysql_query ( $query ) or die ( mysql_error () );
    $num = mysql_num_rows ( $result );
    $allActs = array();
    if ($num != 0)
    {
        $i = 0;
        while ( $row = mysql_fetch_array ( $result ) ) 
        {
            $allActs[] = ["index" => $i++,
            "actId" => $row ['activity_id'], 
            "actName" => $row ['activity_name'], 
            "actSC" => $row ['activity_short_code'], 
            "actPL" => $row ['project_leader'],
            "actCap" => $row ['capacity'], 
            "actDOW" => $row ['day_of_week'], 
            "actDate" => $row ['date']];
        }
    }
    return $allActs;
}

这行 $allActs[] = $oneAct 将按顺序附加它们, $i 并不是真正需要的。

于 2013-04-29T20:33:48.810 回答
0

不确定这是否会有所帮助,但我稍微清理了代码并在您的 SQL 语句中添加了“ORDER BY”。我还使用 array() 添加新的 $allAccts 元素。如果你只关心activity_id,你可以不用'index' 属性和$i 计数器。

如果这仍然不起作用,您可能需要查看 array_push (附加元素)或 array_unshift (附加元素)。这就是您可以安全地实施 LIFO 或 FIFO 的方式。

function getAllActivitiesAtEvent($eventId)
{
    $query = "SELECT * FROM activity WHERE event_id='".$eventId."' ORDER BY activity_id";
    $result = @mysql_query( $query ) or die ( mysql_error () );
    $allActs = array();
    if(mysql_num_rows( $result ) > 0)
    {
        while( $row = mysql_fetch_array( $result ) )
        {
            $allActs[] = array( 
            "actId" => $row['activity_id'],
            "actName" => $row['activity_name'],
            "actSC" => $row['activity_short_code'],
            "actPL" => $row['project_leader'],
            "actCap" => $row['capacity'],
            "actDOW" => $row['day_of_week'],
            "actDate" => $row['date']);
        }
    }
    return $allActs;
}
于 2013-04-29T21:11:15.230 回答