2015-05-12 48 views
1

我從一個MySQL SELECT查詢此數據...如何把扁平MySQL數據到一個多維數組

+--------+----------+---------+--------------+----------------+ 
| vid_id | vid_name | file_id | file_url  | tag_name  | 
+--------+----------+---------+--------------+----------------+ 
|  1 | Video 1 |  1 | video_1.mp4 | Lorem ipsum | 
|  1 | Video 1 |  2 | video_1.webm | Lorem ipsum | 
|  2 | Video 2 |  3 | video_2.mp4 | Dolor sit amet | 
|  2 | Video 2 |  4 | video_2.webm | Dolor sit amet | 
+--------+----------+---------+--------------+----------------+ 

...這我試圖進入一個多維PHP數組,像這樣:

Array 
(
    [0] => Array 
     (
      [name] => Video 1 
      [tag] => Lorem ipsum 
      [files] => Array 
       (
        [0] => video_1.mp4 
        [1] => video_1.webm 
       ) 
     ) 

    [1] => Array 
     (
      [name] => Video 2 
      [tag] => Dolor sit amet 
      [0] => Array 
       (
        [0] => video_2.mp4 
        [1] => video_2.webm 
       ) 
     ) 
) 

當我使用變量來檢查視頻名是否已經添加到數組中時,我會關閉它。但是,我無法弄清楚如何在下一次迭代中只將視頻文件添加到嵌套數組。這是我最好的嘗試至今:

<?php 
    // Define a variable to keep track of iterations: 
    $title = ''; 

    while ($row = mysqli_fetch_assoc($r)) { 

     if ($title != $row['vid_name']) { 
      // Grab all the data: 
      $video_data[] = array(
       'name' => $row['vid_name'], 
       'tag' => $row['tag_name'], 
       $files = array(
        'file' => $row['file_url'] 
       ) 
      ); 
     } else { 
      // Grab only the file URL and add it to the files array: 
      $files[] = $row['file_url']; 
     } 

     // Update the tracking variable: 
     $title = $row['vid_name']; 
    } 
?> 

這不起作用:

Array 
(
    [0] => Array 
     (
      [name] => Video 1 
      [tag] => Lorem ipsum 
      [0] => Array 
       (
        [file] => video_1.mp4 
       ) 
     ) 

    [1] => Array 
     (
      [name] => Video 2 
      [tag] => Dolor sit amet 
      [0] => Array 
       (
        [file] => video_2.mp4 
       ) 
     ) 
) 

我敢肯定,我想要實現是可能的,但我沒有足夠的知識的PHP來算出這一個(我懷疑有更好的方法來獲得我想要的數組)。建議和指針非常感謝!

回答

3

爲什麼不使用vid_id或vid_name(如果唯一)作爲第一個數組鍵?

檢查數組中是否存在vid_id,如果不存在,則添加詳細信息,並將與該vid_id對應的每個文件添加到該密鑰下。

$video_data = array(); 
while ($row = mysqli_fetch_assoc($r)) { 

    $key = $row['vid_id']; 

    // Add details if they don't exist yet 
    if (!isset($video_data[$key])) { 
     $video_data[$key] = [ 
      'name' => $row['vid_name'], 
      'tag' => $row['tag_name'] 
     ]; 
    } 
    // Always add file 
    $video_data[$key]['files'][] = $row['file_url']; 
} 
+0

非常感謝 - 那就是訣竅。雖然有一個小錯誤:if語句缺少一個右括號(我試圖編輯你的答案,但它不會讓我)。無論如何 - 我會在一分鐘內接受你的回答。 – rkhff

+0

@rkhff固定,在前括號之前缺少括號。 – Devon

相關問題