2010-09-21 134 views
0

读变量我有一个数组,看起来像这样:PHP - 从数组字符串字段

$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>'; 

通知的$状态$标题关键字在阵列领域。有什么办法可以将这些关键字“映射”到我在下面设置的变量上?

所以输出会是:

<li><a href="http://twitter.com/home?status=bla bla">Twitter</a></li>'; 
+0

有什么问题你的代码?看起来它应该工作。我不确定在foreach之后是否可以省略大括号,但是看起来不错。 – Mchl 2010-09-21 18:30:28

+0

它没有。我仍然可以在url字段中看到$ status和$ title:( – Alex 2010-09-21 18:31:28

+2

你必须在数组中使用双引号 – JMC 2010-09-21 18:36:30

回答

2

为什么不能做到这一点,设置$status$title,然后再附加给你生成数组。然后,他们准备好,并设置准备好,当你输出的链接

$status = 'bla bla'; 
$title = 'asdasf'; 

$sites = array('Twitter' => 'http://twitter.com/home?status=' . $status, 
    'Digg' => 'http://digg.com/submit?phase=2&amp;title=' . $title, 
    .... 
    ); 


foreach($sites as $site_name=>$site_url) 
    echo '<li><a href="'.$site_url.'">'.$site_name.'</a></li>'; 
+0

看起来有点丑陋:) – Alex 2010-09-21 18:35:02

+0

但它的工作原理。我发现双引号字符串中的变量很丑。阅读代码时,你看不到它们,它看起来像一个字符串。这样你可以看到字符串停止并包含一个变量。 – 2010-09-21 18:37:03

4

单引号字符串将不执行变量替换。在数组之前设置变量并使用双引号。我也喜欢用大括号为清楚:

$status = 'bla bla'; 
$title = 'asdasf'; 

$sites = array('Twitter' => "http://twitter.com/home?status={$status}", 
       'Digg' => "http://digg.com/submit?phase=2&amp;title={$title}", 
       .... 
       ); 
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>'; 
} 

我不知道你想用$标题做什么

1

如果你可以四处走动代码:

$status = 'bla bla'; 
$title = 'asdasf'; 

$sites = array('Twitter' => "http://twitter.com/home?status=$status", 
       'Digg' => "http://digg.com/submit?phase=2&amp;title=$title", 
       .... 
       ); 

否则:

function get_sites($status, $title) 
{ 
    return array('Twitter' => "http://twitter.com/home?status=$status", 
        'Digg' => "http://digg.com/submit?phase=2&amp;title=$title", 
        .... 
        ); 
} 

$sites = get_sites('bla blah', 'asdasf'); 

作为另一个备选方案:

$sites = array('Twitter' => 'http://twitter.com/home?status=$status', 
       'Digg' => 'http://digg.com/submit?phase=2&amp;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>'; 
} 

我不会推荐的最后一种方法,除非有很多的任意内容改变。

第一个是最适合你的。

0

使用嵌套sprintf如果要定义$status$sites声明:

<?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); 
}