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


Array outputs elements in a strange order

在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;
}

…当我在这一页打印t_r时,顺序是正确的。

当我在另一个页面上调用这个函数时,像这样:

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

再打印出元素,顺序不对!

Try with:

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实际上不需要。

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

如果仍然不起作用,您可能需要查看array_push(追加元素)或array_unshift(追加元素)。这就是你如何安全地实现后进先出或先进先出。

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;
}