2017-04-03 4 views
1

こんにちは、私は多次元配列を作成していますが、私はそうするために苦労しています。ありがとうございました。PHPで次のように多次元配列を作成するにはどうすればよいですか?

 [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として何を得るのですか? (その入力を認識していないので)M.Khalaf @ –

2

変更するには、次の行:

$movies[$v['Username']] = $v; 
$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); 

この

は私が現在取得していますものです

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

もう一度お試しください。各反復ごとにUsernameのインデックスの下に新しい配列を作成します。

+0

これは出力です。Array([Mohamed] => Array([0] => Array([ユーザ名] => 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

あなたは何を改善すべきだとお考えですか? M.Khalaf @ –

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

それを試してみてください:配列 ( [モハメド] =>アレイ ( [レディ・イン・ザ・ウォーター、ちょうど私の運、夜LISTNER、スーパーマンリターン、あなたと私とデュプリー] => 3,1.5,3,3.5,5,3.5 ) [0] => 3,1.5,3,3.5,5,3.5 [user1] =>配列 ( [スーパーマンリターン、ナイトリスナー、レディーウォーター、ちょうど私の運、あなたと私とデュプリー] => 3.5,3.5,3,2.5,3,2.5 ) [1] => 3.5,3.5,3,2.5,3,2。選択クエリから5 ) –

+1

削除グループの連結。このコードを使用してください。 – Gaurav

関連する問題