代码之家  ›  专栏  ›  技术社区  ›  Alex

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

  •  0
  • Alex  · 技术社区  · 15 年前

    我有这样一个数组:

      $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>';
    
    6 回复  |  直到 15 年前
        1
  •  2
  •   LVB    15 年前

    只需先分配$status和$title,然后让字符串插值在创建数组时为您完成这项工作。它需要更改为双引号才能工作。请参见:

    http://www.php.net/manual/en/language.types.string.php#language.types.string.parsing

        2
  •  4
  •   Matt McCormick    15 年前

    单引号字符串不会执行变量替换。在数组前面设置变量并使用双引号。为了清晰起见,我也喜欢使用大括号:

    $status = 'bla bla';
    $title = 'asdasf';
    
    $sites = array('Twitter' => "http://twitter.com/home?status={$status}",
                     'Digg' => "http://digg.com/submit?phase=2&amp;title={$title}",
                     ....
                    );
    
        3
  •  2
  •   Jake N    15 年前

    $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>';
    
        4
  •  1
  •   Don    15 年前

    这不管用吗。。。

    $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做什么

        5
  •  1
  •   Matthew    15 年前

    如果您可以移动代码:

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

    如果对你有效的话,第一个是最好的。

        6
  •  0
  •   leepowers    15 年前

    使用嵌套 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);
    }
    
    推荐文章