2017-04-03 115 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