假设我想在类似Twitter的帖子中将主题标签存储在自己的主题标签表中。我遇到的问题是,似乎这个循环在字符串名称列中存储字符串“Array”,而不是实际匹配。这似乎是一个问题,返回的数组是多维的?
preg_match_all("/\S*#(?:\[[^\]]+\]|\S+)/", $body, $matches);
//for each loop array returned in matches
//create_hashtag()
//ISSUE with dimensionality of array
foreach($matches[0] as $v){
create_hashtag($dbh, $v);
attach_hashtag($dbh, $pid, $v);
}
正如你所看到的,我试图通过在第0位调用数组来解决这个问题,但这不起作用。
可能问题出在被调用的函数中:
function attach_hashtag($dbh, $pid, $tagname) {
//insert into Tagged
try {
$sql = 'INSERT INTO Tagged (hashtag_name, post_id)
VALUES (:name, :pid);';
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':name', $tagname);
$stmt->bindParam(':pid', $pid);
$stmt->execute();
$array = [
'status' => 1,
];
return $array;
} catch (Exception $ex){
$array = [
'status' => 0,
];
return $array;
}}
和
function create_hashtag($dbh, $tagname) {
try {
$sql = 'INSERT INTO Hashtags (name)
VALUES (:name);';
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':name', $tagname);
$stmt->execute();
$array = [
'status' => 1,
];
return $array;
} catch (Exception $ex){
$array = [
'status' => 0,
];
return $array;
}
//insert into Hashtags}
编辑: 我使用var_dump来确保查询有效。
//var_dump($pid); returns proper value
preg_match_all("/\S*#(?:\[[^\]]+\]|\S+)/", $body, $matches);
//for each loop array returned in matches
//echo $matches['Array']; - why does this return "Array"
//ISSUE with dimensionality of array
foreach($matches['Array'] as $v){
create_hashtag($dbh, $v);
attach_hashtag($dbh, $pid, $v); //inserts into tagged,
}
答案 0 :(得分:0)
我做了一些"发明的快速测试"身体:
$body = 'fasd #has kfewf #tag lkfds #test 22 #fin';
preg_match_all("/\S*#(?:\[[^\]]+\]|\S+)/", $body, $matches);
var_dump($matches);
结果是:
array(1) {
[0]=>
array(4) {
[0]=>
string(4) "#has"
[1]=>
string(4) "#tag"
[2]=>
string(5) "#test"
[3]=>
string(4) "#fin"
}
}
所以你的$ matches [0]应该没问题。现在可以检查一下,如果你的mysql查询成功了吗?请检查$ stmt-> execute()的返回值。如果错了,请查询您的问题。
$result = $stmt->execute();
if ($!result) {
$error = $stmt->errorInfo();
print_r($error);
}