2017-10-20 109 views
-2

我有以下功能:PHP爆炸()返回一個數組內數組

function GetTagsOfUser(){ 
      require "include/connect.php"; 
      $sql = "SELECT * FROM users WHERE User='Chona'"; 
      $result = $conn->query($sql); 

      if ($result->num_rows > 0) { 
       while ($row = $result->fetch_assoc()){ 
        $tagsOfUser[] = explode(';', $row['Tags']); 
       } 
       return $tagsOfUser; 
      } 

,把它進行打印

print_r($Recomend->GetTagsOfUser()); 

時,我得到如下:

array(1) { [0]=> array(4) { [0]=> string(6) "Paises" [1]=> string(7) "Francia" [2]=> string(19) "Revolucion Francesa" [3]=> string(3) "ONU" } } 

它看起來好像在我的數組中包含字符串的數組,我想有一個數組,請幫助。

+0

這可能是因爲這行:'$ tagsOfUser [] =爆炸(...)' 如果你改變這一行爲'return explode(...)',你將有一個單一的水平數組 –

+0

$ tagsOfUser [] .. []創建它? –

回答

1

變量$ tagsOfUser []是一個數組:

$tagsOfUser[] = explode(';', $row['Tags']); 

而且爆炸返回一個數組,其結果是,你在做什麼。

從變量名稱中除去「[]」,問題就解決了。

+0

*從變量名中刪除「[]」,問題就會解決。* - 兩行發生了什麼? –

1

您可以設置從explode結果陣列到另一個陣列($tagsOfUser):

$tagsOfUser[] = explode(';', $row['Tags']); 

可以使用array_merge來解決這個問題:

$tagsOfUser = array_merge($tagsOfUser, explode(';', $row['Tags'])); 

function GetTagsOfUser() { 
    require "include/connect.php"; 

    $sql = "SELECT * FROM users WHERE User='Chona'"; 
    $result = $conn->query($sql); 

    if ($result->num_rows > 0) { 
     $tagsOfUser= []; 

     while ($row = $result->fetch_assoc()){ 
      $tagsOfUser = array_merge($tagsOfUser, explode(';', $row['Tags'])); 
     } 

     return $tagsOfUser; 
    } 
} 

你只需要/需要一行(對於特定用戶)?

在這種情況下,你不需要while環或$tagsOfUser變量:

function GetTagsOfUser() { 
    require "include/connect.php"; 

    $sql = "SELECT TOP 1 * FROM users WHERE User = 'Chona'"; 
    $result = $conn->query($sql); 

    if ($result->num_rows == 1) { 
     $row = $result->fetch_assoc(); 
     return explode(';', $row['Tags']); 
    } else { 
     return []; 
    } 
}