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, 
} 
+0

foreach($ matches ['Array'] as $ v){ - 这应该给什么?如果你不知道,阵列中有什么,不要使用回声。输出$与var_dump或print_r匹配。 – Seb

+0

@Krpcannon我想帮助您找到解决此问题的解决方案。你可以做'var_export($ matches)',将数据发布到你的问题,然后ping我? – mickmackusa

我做了一些 “发明” 身体快速测试:

$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