PHP explode() возвращает массив внутри массива

У меня есть следующая функция:

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" } }

Похоже, что в моем массиве был массив, содержащий строки, я хочу иметь один массив, пожалуйста, помогите.

2 ответа

Решение

Переменная $tagsOfUser[] является массивом:

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

И взорвать возвращает массив, результат именно то, что вы делаете.

Удалите "[]" из имени переменной, и ваша проблема будет решена.

Вы устанавливаете массив результатов из 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 [];
    }
}
Другие вопросы по тегам