我有一个如下所示的数组:
$sites = array('Twitter' => 'http://twitter.com/home?status=$status',
'Digg' => 'http://digg.com/submit?phase=2&title=$title',
....
);
$status = 'bla bla';
$title = 'asdasf';
foreach($sites as $site_name=>$site_url)
echo '<li><a href="'.$site_url.'">'.$site_name.'</a></li>';
请注意数组字段中的 $ status 和 $ title 关键字。有什么方法可以将这些关键字“映射”到我在下面设置的变量吗?
所以输出将是:
<li><a href="http://twitter.com/home?status=bla bla">Twitter</a></li>';
答案 0 :(得分:4)
单引号字符串不会执行变量替换。在数组之前设置变量并使用双引号。为了清晰起见,我还想使用大括号:
$status = 'bla bla';
$title = 'asdasf';
$sites = array('Twitter' => "http://twitter.com/home?status={$status}",
'Digg' => "http://digg.com/submit?phase=2&title={$title}",
....
);
答案 1 :(得分:2)
为什么不这样做,首先设置$status
和$title
,然后追加到你生成的数组。然后它们就绪并准备好在您输出链接时
$status = 'bla bla';
$title = 'asdasf';
$sites = array('Twitter' => 'http://twitter.com/home?status=' . $status,
'Digg' => 'http://digg.com/submit?phase=2&title=' . $title,
....
);
foreach($sites as $site_name=>$site_url)
echo '<li><a href="'.$site_url.'">'.$site_name.'</a></li>';
答案 2 :(得分:2)
首先分配$ status和$ title,然后在创建数组时让字符串插值为您完成工作。它需要更改双引号才能工作。参见:
http://www.php.net/manual/en/language.types.string.php#language.types.string.parsing
答案 3 :(得分:1)
这不会起作用......
$status = 'bla bla';
$title = 'asdasf';
foreach($sites as $site_name=>$site_url){
echo '<li><a href="'.$site_url.'?status='.$status">'.$site_name.'</a></li>';
}
我不确定你要用$ title
做什么答案 4 :(得分:1)
如果你可以移动代码:
$status = 'bla bla';
$title = 'asdasf';
$sites = array('Twitter' => "http://twitter.com/home?status=$status",
'Digg' => "http://digg.com/submit?phase=2&title=$title",
....
);
否则:
function get_sites($status, $title)
{
return array('Twitter' => "http://twitter.com/home?status=$status",
'Digg' => "http://digg.com/submit?phase=2&title=$title",
....
);
}
$sites = get_sites('bla blah', 'asdasf');
作为另一种选择:
$sites = array('Twitter' => 'http://twitter.com/home?status=$status',
'Digg' => 'http://digg.com/submit?phase=2&title=$title',
....
);
foreach($sites as $site_name=>$site_url)
{
$site_url = strtr($site_url, array('$status' => 'bla blah', '$title' => 'asdasf'));
echo '<li><a href="'.$site_url.'">'.$site_name.'</a></li>';
}
除非有大量任意内容需要更改,否则我不建议使用最后一种方法。
如果适合你的话,第一个是最好的。
答案 5 :(得分:0)
如果要在 $status
声明之后定义$sites
,请使用嵌套sprintf
:
<?php
// $sites is defined in a bootstrap / settings file ....
$sites = array(
'Twitter' => 'http://twitter.com/home?status=%s',
'Digg' => 'http://digg.com/submit?phase=2&title=%s',
);
....
// $status can be dynamic, loaded from a db, etc.
$status = 'omglol';
....
// And output!
foreach ($sites as $name => $url) {
echo sprintf('<li><a href="%s">%s</a></li>',
sprintf($url, $status),
$name);
}