数组以奇怪的顺序输出元素

时间:2013-04-29 20:06:33

标签: php arrays

在xampp dev环境中使用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;
}

...当我在此页面上打印__时,订单是正确的。

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

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

然后打印出元素,顺序错了!

2 个答案:

答案 0 :(得分: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并不是真的需要。

答案 1 :(得分: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;
}