2011-09-23 69 views
-1

我在Flash中有一個應用程序,其中多個用戶可以登錄並可以上傳圖像。當用戶登錄時,他可以查看他上傳的圖像,也可以查看其他用戶上傳的圖像(僅限允許的圖像)。爲此,我通過PHP生成XML文件。如何更改XML中的子標記順序(由PHP生成)

請檢查xml文件。

<images> 
    <users user_name="Hardik"> 
     <image image_id="1316683023140" image_title="water" image_desc="water" image_path="all_users/Hardik/1316683023140.jpg" image_like="false"/> 
     <image image_id="1316683057577" image_title="sunset" image_desc="sunset" image_path="all_users/Hardik/1316683057577.jpg" image_like="false"/> 
     <image image_id="1316683115124" image_title="hills" image_desc="hills" image_path="all_users/Hardik/1316683115124.jpg" image_like="false"/> 
     <image image_id="1316683713159" image_title="sun" image_desc="sun" image_path="all_users/Hardik/1316683713159.jpg" image_like="false"/> 
     <image image_id="1316684544200" image_title="sun" image_desc="sun" image_path="all_users/Hardik/1316684544200.jpg" image_like="false"/> 
     <image image_id="1316686014899" image_title="sun" image_desc="sun" image_path="all_users/Hardik/1316686014899.jpg" image_like="false"/> 
     <image image_id="1316600184214" image_title="asd" image_desc="asd" image_path="all_users/Hardik/1316600184214.jpg" image_like="false"/> 
     <image image_id="1316668356801" image_title="hello" image_desc="hello" image_path="all_users/Hardik/1316668356801.jpg" image_like="false"/> 
     <image image_id="1316600221759" image_title="asd" image_desc="asd" image_path="all_users/Hardik/1316600221759.jpg" image_like="false"/> 
     <image image_id="1316600193960" image_title="asd" image_desc="asd" image_path="all_users/Hardik/1316600193960.jpg" image_like="false"/> 
     <image image_id="1316600172938" image_title="asd" image_desc="asd" image_path="all_users/Hardik/1316600172938.jpg" image_like="false"/> 
     <image image_id="1316600144316" image_title="asd" image_desc="asd" image_path="all_users/Hardik/1316600144316.jpg" image_like="false"/> 
     <image image_id="1316600173551" image_title="asd" image_desc="asd" image_path="all_users/Hardik/1316600173551.jpg" image_like="false"/> 
     <image image_id="1316600177792" image_title="asd" image_desc="asd" image_path="all_users/Hardik/1316600177792.jpg" image_like="false"/> 
     <image image_id="1316496700758" image_title="sunset" image_desc="sunset" image_path="all_users/Hardik/1316496700758.jpg" image_like="false"/> 
     <image image_id="1316252181829" image_title="allow" image_desc="allow" image_path="all_users/Hardik/1316252181829.jpg" image_like="false"/> 
     <image image_id="1316690195793" image_title="asasdas" image_desc="asdasd" image_path="all_users/Hardik/1316690195793.jpg" image_like="false"/> 
     <image image_id="1316600153509" image_title="asd" image_desc="asd" image_path="all_users/Hardik/1316600153509.jpg" image_like="false"/> 
     <image image_id="1316408901775" image_title="winter" image_desc="winter" image_path="all_users/Hardik/1316408901775.jpg" image_like="false"/> 
    </users> 
    <users user_name="raj"> 
      <image image_id="1315996252734" image_title="abc" image_desc="abc" image_path="all_users/raj/1315996252734.jpg" image_like="false"/> 
    </users> 
    <users user_name="sandip"> 
      <image image_id="1315996256153" image_title="abc" image_desc="abc" image_path="all_users/sandip/1315996256153.jpg" image_like="false"/> 
    </users> 
</images> 

我有一個合乎邏輯的問題,我的XML文件(由PHP產生)。現在我想更改子標記順序。我想在第一個位置有一個用戶(已登錄)的子標籤。

說如果sandip登錄他的孩子標籤應該先來,而不是hardik。

您可以點擊這裏

<?php 
    require_once('connection.php'); 

    header('Content-type: text/xml'); 
    echo "<?xml version='1.0' encoding='UTF-8'?>"; 
    echo "<images>"; 

    $id=''; 
    $count=0; 
    $result_1 = ''; 


    $query = "select ui.userId as 'UI userId', ua.userName as 'UI userName', ui.imageId as 'UI ImageId', ul.imageId as 'UL ImageId' , ui.imageRights, ui.imagePath, ui.imageTitle, ui.imageDesc from user_account ua, (select * from user_images where userId=".$_REQUEST['userId']." or imageRights='Allow') as ui left join (select * from user_likes where userId=".$_REQUEST['userId'].") as ul on ui.imageId = ul.imageId where ua.userId=ui.userId order by ui.userId"; 

    $result_row = mysql_query($query); 

    while($row = mysql_fetch_array($result_row, MYSQL_ASSOC)) 
    { 
      if($id != $row['UI userId']) 
      { 
       if($count == 0) 
       { 
        $result_1 .= "<users user_name='".$row['UI userName']."'>"; 
       } 
       else 
       { 
        $result_1 .= "</users>"; 
        $result_1 .= "<users user_name='".$row['UI userName']."'>"; 
       } 
       $id = $row['UI userId']; 
      } 

      $result_1 .= "<image image_id='".$row['UI ImageId']."' image_title='".$row['imageTitle']."' image_desc='".$row['imageDesc']."' image_path='".$row['imagePath']."' image_like='"; 

      if($row['UL ImageId']) 
       $result_1 .= "true"; 
      else 
       $result_1 .= "false"; 
      $result_1 .= "' />"; 

      $count++; 

      if($count == mysql_num_rows($result_row)) 
       $result_1 .= "</users>"; 
    } 

    echo $result_1; 
    echo "</images>"; 
?> 

我的PHP代碼,如果您有任何更好的解決方案,請轉發。

+0

如果你還沒有任何答案,請不要向下票。請。 – hardik

+0

我只需要PHP的幫助,我應該遵循的邏輯是什麼,以便我得到我想要的XML。 – hardik

+0

最後我得到一個答案(完美工作),但我仍然找到比這更好的答案。 – hardik

回答

1

我想除了提出一些修正你的PHP腳本來解決你的問題:

$num_of_rows = mysql_num_rows($result_row); // Don't call this every loop it's very slow 
$rows = []; 
while($row = mysql_fetch_array($result_row, MYSQL_ASSOC)){ 
    if($id == $row['UI userId']){ 
     // Print the logged in user's images 
    } else { 
     $rows[] = $row; 
    } 
} 

// Print here the rest of the results 
foreach ($rows as $row) { 
    if($id != $row['UI userId']) 
    { 
     if($count == 0) 
     { 
      $result_1 .= "<users user_name='".$row['UI userName']."'>"; 
     } 
     else 
     { 
      $result_1 .= "</users>"; 
      $result_1 .= "<users user_name='".$row['UI userName']."'>"; 
     } 
     $id = $row['UI userId']; 
    } 

    $result_1 .= "<image image_id='".$row['UI ImageId']."' image_title='".$row['imageTitle']."' image_desc='".$row['imageDesc']."' image_path='".$row['imagePath']."' image_like='"; 

    if($row['UL ImageId']) 
     $result_1 .= "true"; 
    else 
     $result_1 .= "false"; 
    $result_1 .= "' />"; 

    $count++; 

    if($count == $num_of_rows) 
     $result_1 .= "</users>"; 
} 

echo $result_1; 
echo "</images>"; 
?> 
+0

很多thanx這個答案.. :) – hardik

+0

我仍然想比這更好的解決方案,請向前如果你有。 – hardik

+0

如果你不能想到一個更好的解決方案,你怎麼能知道? 除了將其分成兩個循環外,沒有其他辦法,因爲您不知道登錄用戶在結果中的位置。 爲什麼你需要更好的解決方案? – Shedokan