在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);
然后打印出元素,顺序错了!
答案 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;
}