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 [];
}
}