PHP - 从数组字符串字段中读取变量

时间:2010-09-21 18:27:17

标签: php arrays string variables

我有一个如下所示的数组:

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

6 个答案:

答案 0 :(得分: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 :(得分: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>';

答案 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&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>';
}

除非有大量任意内容需要更改,否则我不建议使用最后一种方法。

如果适合你的话,第一个是最好的。

答案 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);
}