Preg_match_all返回多维数组 - 访问元素时遇到问题
问题描述:
假设我想将类似twitter的帖子中的hashtag存储在它自己的hashtags表中。我遇到的问题是,它看起来好像这个循环将字符串“Array”存储在hashtag名称列中,而不是实际匹配。这似乎是一个问题,因为返回的数组是多维的?你可以看到,我试图通过在第0点调用数组来解决这个问题,但是这并不奏效。Preg_match_all返回多维数组 - 访问元素时遇到问题
也许问题是在调用的函数:
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,
}
答
我做了一些 “发明” 身体快速测试:
$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"
}
}
所以你的$比赛[0]应该没问题。现在你可以检查,如果你的MySQL查询是成功的?请检查$ stmt-> execute()的返回值。如果它是错误的,那么你的查询有问题。
$result = $stmt->execute();
if ($!result) {
$error = $stmt->errorInfo();
print_r($error);
}
+0
请参阅编辑。当我用var_dump测试$ matches数组时,它返回'array' – Krpcannon
foreach($ matches ['Array'] as $ v){ - 这应该给什么?如果你不知道,阵列中有什么,不要使用回声。输出$与var_dump或print_r匹配。 – Seb
@Krpcannon我想帮助您找到解决此问题的解决方案。你可以做'var_export($ matches)',将数据发布到你的问题,然后ping我? – mickmackusa