Я работаю над этой системой хэштегов. Я пытаюсь ввести слова хэштега в базу данных в новой строке. для каждого слова хэштега мне нужно вставить его в новую строку. Ниже моя строка кода php ...
$string = filter_var("#hello #world", FILTER_SANITIZE_STRING);
preg_match_all('/(?<!\w)#\w+/', $string, $matches);
foreach ($matches as $key => $value) {
$stmt = $mysqli->prepare("INSERT INTO hash_tag (tagged_word) VALUES (?)");
$stmt->bind_param("s", $value);
$stmt->execute();
}
делая это таким образом, он ничего не вставляет в базу данных, но когда я заменяю $value на $value[0], он вводит первый, который является #hello.
Я хочу ввести как #hello, так и #world в базу данных в виде новой строки.
Заранее спасибо.






Измените цикл foreach с:
foreach ($matches as $key => $value) {
К
foreach ($matches[0] as $key => $value) {
Потому что $matches - это многомерный массив, и мы пытаемся получить доступ к его 0-му и 1-му элементам, которые снова являются массивами, а не строками.
Если мы попытаемся получить доступ к первому подмассиву $matches, он будет работать отлично.
Итак, окончательный код:
<?php
$string = filter_var("#hello #world", FILTER_SANITIZE_STRING);
preg_match_all('/(?<!\w)#\w+/', $string, $matches);
if (isset($matches[0]) && ! empty($matches[0])) {
foreach ($matches[0] as $key => $value) {
//echo '<pre>';print_r($key);echo '</pre>';
//echo '<pre>';print_r($value);echo '</pre>';
$stmt = $mysqli->prepare("INSERT INTO hash_tag (tagged_word) VALUES (?)");
$stmt->bind_param("s", $value);
$stmt->execute();
}
}