1

xampp 開発環境で PHP 5.4.7 を使用します。

私のデータ層ファイルには、MySql テーブルからデータを取得する関数があり、後でコンテンツにアクセスできるように 2 次元配列を作成します。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 に答える