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