2012-07-20 86 views
0

我想问一下我的代码是否正确。带有2个foreach语句的PHP foreach格式

我有这2个爆炸命令:

$url = 'http://google.com, http://yahoo.com, http://msn.com, http://yahoo.com, http://msn.com, http://yahoo.com, http://msn.com'; 
$key = 'google, yahoo, msn'; 
$xurl = explode(',', $url); 
$xkey = explode(',', $key); 

foreach ($xurl as $hyperlink) { 
    foreach ($xkey as $keyword) 
    $sqlHyperLink = mysql_query("INSERT INTO jon_hyperlink VALUE('', '$hyperlink', '$keyword', NOW())") or die (mysql_error()); 
} 
    echo 'Hyperlink Created'; 

UPDATE * 如果你会发现,在$url变量上市7网址和我有3个关键词。我怎样才能使关键字反复...

如何插入一个foreach字符串,因为我用我的查询2 foreach,它插入了2次。有一个更好的方法吗?

+1

除了mysql_ *函数应该用PDO替换,它对我来说看起来不错。 – Gntem 2012-07-20 08:04:06

回答

2

你可以这样做:

$xurl = explode(',', $url); 
$xkey = explode(',', $key); 

$assoc = array_combine($xkey, $xurl); 

foreach ($assoc as $keyword => $hyperlink) { 
    //insert here 
} 
+0

您好我的代码出错了,您说'两个参数都应该有相同数量的元素' – Butternut 2012-07-20 10:18:02

+0

@ user1538668您必须确定两个数组的元素数相同(在您的示例中必须有相同的','在你的字符串) – Leri 2012-07-20 10:21:12

+0

是的,但T_T我很抱歉,我更新了这篇文章,我需要把10个网址为例,然后只有3个关键字,然后这3个关键字应该重复这10url ... – Butternut 2012-07-20 10:24:15

0

倒锤使用索引的数组。

$numItems = count($xurl); 
for ($i=0; $i<$numItems; $i++) { 
    $sqlHyperLink = mysql_query("INSERT INTO jon_hyperlink VALUE('', '{$xurl[$i]}', '{$xkey [$i]}', NOW())") or die (mysql_error()); 
} 

理想退房PDO在那里你可以将值绑定到一个准备好的查询 - 它的速度更快,更安全,更好的做法,但!

0
$url = 'http://google.com, http://yahoo.com, http://msn.com, http://yahoo.com, http://msn.com, http://yahoo.com, http://msn.com'; 
$key = 'google, yahoo, msn'; 
$xurl = explode(',', $url); 
$xkey = explode(',', $key); 

foreach ($xurl as $i => $keyword) { 
    $sqlHyperLink = mysql_query("INSERT INTO jon_hyperlink VALUE('', '{$xkey[$i]}', '$keyword', NOW())") or die (mysql_error()); 
} 
+0

有很多错误......'为foreach()提供的无效参数' – Butternut 2012-07-20 10:27:00

+0

更好吗? – mattclegg 2012-07-20 11:59:04

0

如果$ url和$键映射一起以正确的顺序,你可以只使用一个简单的for循环与索引和访问两个数组每个循环。

for($i = 0; $i < sizeof($key); $i++) 
{ 
    mysql_query("insert ... $key[$i] .. $url[$i] .."); 
}