2010-09-21 4 views
0

J'ai un tableau qui ressemble à ceci:PHP - lire les variables d'un champ de chaîne de tableau

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

Notez que le $ status et $ title mots-clés dans les champs de tableau. Est-il possible de "mapper" ces mots-clés aux variables que je définis ci-dessous?

de sorte que la sortie serait:

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

Quel est le problème avec le code que vous avez? On dirait que ça devrait marcher. Je ne suis pas sûr si vous pouvez omettre '{}' accolades après foreach, mais sinon cela semble bien. – Mchl

+0

ce n'est pas le cas. Je vois encore $ status et $ title dans le champ url :( – Alex

+2

Vous devez utiliser des guillemets doubles dans le tableau – JMC

Répondre

2

Pourquoi ne pas faire cela, définissez le $status et $title d'abord, puis ajouter au tableau que vous produisez. Ils sont alors prêts et prêts à mettre en sortie lorsque vous le lien

$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

semble un peu moche :) – Alex

+0

Mais cela fonctionne. J'ai trouvé que les variables dans les chaînes entre guillemets doubles étaient moche. Vous ne pouvez pas les voir facilement quand vous lisez le code, cela ressemble à une chaîne. De cette façon, vous pouvez voir que la chaîne s'arrête et contient une variable. –

4

entre guillemets simples chaînes ne seront pas effectuer une substitution variable. Définissez les variables avant le tableau et utilisez des guillemets. J'aime aussi utiliser des accolades pour plus de clarté:

$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

ne serait-ce travail ...

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

foreach($sites as $site_name=>$site_url){ 
    echo '<li><a href="'.$site_url.'?status='.$status">'.$site_name.'</a></li>'; 
} 

Je ne sais pas ce que vous essayez de faire avec le titre de $

1

Si vous pouvez déplacer le code autour de:

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

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

Sinon:

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

Comme une autre alternative:

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

Je ne recommanderais pas la dernière approche moins qu'il y ait beaucoup de contenu arbitraire de changer.

Le premier est le meilleur si cela fonctionne pour vous.

0

Utilisez imbriquée sprintf si vous souhaitez définir $statusaprès la déclaration $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); 
} 
Questions connexes