2017-04-03 120 views
1

嗨,大家好我想創建一個多維數組作爲格式波紋管,但我正在努力這樣做,任何幫助將不勝感激。謝謝。如何在php中創建一個多維數組?

$movies = array(); 
    $sql = "SELECT u.username AS Username, group_concat(v.title) AS Video_title, group_concat(r.rate) AS Rating 
    FROM `rating` AS r 
    JOIN `uploads` AS v ON r.video_id = v.vid_id 
    JOIN `users` as u ON u.user_id = r.rater_id 
    GROUP by Username" ; 

    $query = mysqli_query($conn, $sql); 

    while($result = mysqli_fetch_assoc($query)){ 
    $movies[] = $result; 
    } 

    foreach($movies as $k => $v){ 
    unset($movies[$k]); 
    $movies[$v['Username']] = $v; 
    } 
    foreach($movies as $k => $v){ 
    unset($movies[$k]['Username']); 
    } 

    print_r($movies); 

這就是我目前得到:

 [user1] => Array ([Video_title] => Snakes on the Plane, 
             Superman Returns, 
             The Night Listner, 
             Lady in the Water, 
             Just my Luck, 
             You me and Dupree 
         [Rating] => 3.5, 
            3.5, 
            3, 
            2.5, 
            3, 
            2.5 
        )) 

但我的目標,以輸出它的格式如下:

'user1' => 
      array('Lady in the Water' => 2.5, 
       'Snakes on a Plane' => 3.5, 
       'Just My Luck' => 3.0, 
       'Superman Returns' => 3.5, 
       'You, Me and Dupree' => 2.5, 
       'The Night Listener' => 3.0 
       ) 
+1

所需輸出完全由你(在索引項或者可以說列名稱)發生了什麼變化。這是不可能的 –

+0

@AlivetoDie我真的不是真的有完全相同的輸出值只有,但我正在尋找數組使用的數量的變化。 –

+0

M.Khalaf檢查我的答案一次 –

回答

1

你必須這樣做象下面這樣: -

$movies = array(); 
    $sql = "SELECT u.username AS Username, group_concat(v.title) AS Video_title, group_concat(r.rate) AS Rating 
    FROM `rating` AS r 
    JOIN `uploads` AS v ON r.video_id = v.vid_id 
    JOIN `users` as u ON u.user_id = r.rater_id 
    GROUP by Username" ; 
    $query = mysqli_query($conn, $sql); 

    while($result = mysqli_fetch_assoc($query)){ 
     $movies[] = $result; 
    } 

    $new_movies = array(); // a new array variable 

    foreach($movies as $k => $v){ 
     $array_keys = explode(',',$v['Video_title']); // explode Video_title string into array 
     $trimmed_array_key=array_map('trim',$array_keys); // trim all spaces from each value of $trimmed_array_key array 
     $array_values = explode(',',$v['Rating']); // explode Rating array 
     $trimmed_array_values=array_map('trim',$array_values);//remove all spaces from $trimmed_array_values array 
     $new_movies[$v['Username']] = array_combine($trimmed_array_key,$trimmed_array_values); // combine $trimmed_array_key array and $trimmed_array_values array and assign to corresponding user 
    } 


    echo "<pre/>";print_r($new_movies); // print new array 

注: -

這條線: - $trimmed_array_key=array_map('trim',$array_keys);

會做類似如下: -

https://eval.in/766605

參考: - http://php.net/manual/en/function.array-combine.php

+0

是的,我真的不知道tbh,謝謝反正我很欣賞你的幫助。 –

+0

@ M.Khalaf很樂意幫助你。請刪除您以前的評論。他們現在毫無意義。 –

+0

我的主要目的是提取數據以便在此方法中使用它:https://eval.in/766712然而,它不能很好地工作是我的問題排序問題或?這是我得到的輸出https://eval.in/766713我應該只是改變我的問題或更新它? (錯誤來自第4-6行)(因爲它沒有識別輸入) –

2

更改以下行:

$movies[$v['Username']] = $v; 

$movies[$v['Username']][] = $v; 

並重試。它將在每個迭代的Username索引下創建一個新陣列。

+0

這是輸出im獲取:Array([Mohamed] => Array([0] => Array([Username] => Mohamed [Video_title] =>水中的女士,只是我的幸運的是,夜間列隊員,平面上的蛇,超人歸來,你我和Dupree [Rating] => 3,1.5,3,3.5,5,3.5))[user1] => Array([0] => Array( [用戶名] => user1 [Video_title] =>飛機上的蛇,超人歸來,夜行者,水中女士,只是我的運氣,你我和Dupree [評分] => 3.5,3.5,3,2.5,3 ,2.5)))陣列上的陣列太多 –

+0

您所需的格式與您得到的格式完全不同。 –

+0

你有什麼建議我應該改進? –

1

試試這個代碼,您的目標結果:

$movies = array(); 
    $sql = " 

    SELECT u.username AS Username, v.title AS Video_title, r.rate AS Rating 
    FROM `rating` AS r 
    JOIN `uploads` AS v ON r.video_id = v.vid_id 
    JOIN `users` as u ON u.user_id = r.rater_id 
    GROUP by Username" ; 

    $query = mysqli_query($conn, $sql); 

    while($result = mysqli_fetch_assoc($query)){ 
     $movies[$result['Username']][$result['Video_title']] = $result['Rating']; 
    } 

    print_r($movies); 
+0

不太有這就是我現在越來越:陣列 ( [穆罕默德] =>陣列 ( [水妖,只是我的運氣,夜聽者,在飛機上的蛇,超人歸來,你我和Dupree] => 3,1.5,3,3.5,5,3.5 ) [0] => 3,1.5,3,3.5,5,3.5 [user1] =>陣列 ( )[平面上的蛇,超人歸來,夜間守望者,水中的女人,只是我的運氣,你我和Dupree] => 3.5,3.5,3,2.5,3,2.5 ) [1] => 3.5,3.5,3,2.5,3,2。5 ) –

+1

從選擇查詢中刪除組concat。並使用此代碼。 – Gaurav