【发布时间】:2017-04-11 22:36:58
【问题描述】:
假设我希望将类似 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,
}
【问题讨论】:
-
foreach($matches['Array'] as $v){ - 这应该给出什么?如果您不想知道数组中有什么,请不要使用 echo。输出 $matches 与 var_dump 或 print_r。
-
@Krpcannon 我想帮助您找到解决此问题的方法。你能做一个
var_export($matches),将该数据发布到你的问题中,然后ping我吗?
标签: php multidimensional-array preg-match-all