簡體   English   中英

如何將這些數據分組到一個數組中?

[英]How do I group this data into an array?

我的表看起來像這樣:

artist_id | song_id | user_id
a1          s1        u1
a1          s2        u1
a2          s9        u1
a3          s15       u2

我希望我的輸出看起來像:

Array
    (
    [u1] => Array
        (
         [a1] => Array
           (
               [0] => s1
               [1] => s2
           )
         [a2] => Array
           (
               [0] => s9
           )
   )
   [u2] => Array
        (
         [a3] => Array
           (
               [0] => s15
           )

   )

我應該從哪里開始?

我不確定我的方法是否最有效:

  • 抓取並分組user_id ,循環它們。

  • 對於每個user_id ,請抓取artist_id

  • 對於每個artist_id抓住下面的song_id

有沒有辦法進行此查詢?

您可以從MySQL查詢中獲得以下結果集。 使用庫PDO或MySQLi中的任何一個。

<?php
$results = array(
                0 => array('artist_id' => 'a1', 'song_id' => 's1', 'user_id' => 'u1'),
                1 => array('artist_id' => 'a1', 'song_id' => 's2', 'user_id' => 'u1'),
                2 => array('artist_id' => 'a2', 'song_id' => 's9', 'user_id' => 'u1'),
                3 => array('artist_id' => 'a3', 'song_id' => 's15', 'user_id' => 'u2')
            );
echo '<pre>';print_r($results);echo '</pre>';
?>

試試這個,

<?php
$new_array = array();

foreach($results as $keys=>$values) {
    $new_array[$values['user_id']][$values['artist_id']][] = $values['song_id'];
}
echo '<pre>';print_r($new_array);echo '</pre>';
?>

注意:您無法從單個查詢中獲取它,這取決於結果集。 我用你的結果集解釋了 在此輸入圖像描述

只要我看到,你需要在你的表中獲得所有結果,沒有count ,沒有sum等。

因此,您無法在SQL查詢中進行group by ,只需將它們全部選中並在PHP中進行分組即可:

$result=array();
$mysqli_result=$mysqli->query("SELECT `artist_id`,`song_id`,`user_id` FROM `songs`");
while($row=$mysqli_result->fetch_assoc())
{
    if(empty($result[$row["user_id"]]))
        $result[$row["user_id"]]=array();
    if(empty($result[$row["user_id"]][$row["artist_id"]]))
        $result[$row["user_id"]][$row["artist_id"]]=array();
    $result[$row["user_id"]][$row["artist_id"]][]=$row["song_id"];
}
print_r($result);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM