2011-07-30 2 views
0

J'essaie de générer un e-mail hebdomadaire pour les utilisateurs de mon site qui répertorie les emplacements qui ont ajouté de nouvelles informations. Quand quelqu'un ajoute des informations, une table reçoit deux chiffres, un pour l'état et le second pour le comté. La première étape de mon travail cron est de prendre les chiffres et de les convertir en format comté, état (Alameda, en Californie par exemple). À la fin de chaque conversion, j'ai ajouté un | à utiliser comme délimiteur. Cette partie fonctionne parfaitement. Ensuite, je passe en boucle chaque utilisateur pour envoyer cette information par e-mail, mais cette partie ne fonctionne pas. Ce que je me retrouve avec le tableau de mots au lieu de mon comté, format d'état. Qu'est-ce que je rate?Explosion d'un tableau pour un message électronique

C'est le code qui effectue la 1ère étape, qui fonctionne très bien:

$i = 0; 
while ($row = mysql_fetch_assoc($result)) { 
$SID = $row['SID']; 
$CID = $row['CID']; 

$states = mysql_query("SELECT * FROM State WHERE ID = '$SID'"); 
while ($state = mysql_fetch_array($states)) { 
    $statename = $state['Name']; 
} 

$countys = mysql_query("SELECT * FROM County WHERE ID = '$CID'"); 
while ($county = mysql_fetch_array($countys)) { 
    $countyname = $county['Name']; 
} 

$locations = '<a href="http://hammerpins.net/display.php?state=' . $SID .' &county=' . $CID .'" >' . "$countyname, $statename ". '</a>' . "|"; 
$i = $i + 1; 
} 

Voici le code que j'utilise pour faire exploser le tableau dans le comté, le format de l'Etat, qui ne fonctionne pas correctement . Au lieu de cela, j'obtiens le mot tableau.

$locals = explode("|", $locations); 

$ local est utilisé dans l'e-mail comme liste de nouvelles informations. S'il te plait, oriente moi dans la bonne direction. Merci

+1

Cela ne répond pas à votre question, mais je dois encore dire: Cela pourrait être fait d'une bien meilleure façon. Tenir une chaîne pleine d'éléments et ensuite les exploser pourrait être fait avec un tableau. En outre, les données pourraient être stockées dans la base de données beaucoup plus efficacement pour cela aussi. – Flipper

+0

Merci Flipper.En fait, je l'ai fait en tant que tableau (ce qui est la raison pour les lignes $ i = 0 et $ i = $ i + 1. Comme je ne pouvais pas trouver un moyen de mécaniser le tableau dans l'e-mail, J'ai changé de cheval au milieu du ruisseau et je suis parti avec la méthode explosive, qui, d'après tous les commentaires, semble ne pas être la bonne direction –

Répondre

0

D'abord, quel est le but de $i?

Deuxièmement, je pense que vous voulez concaténer $locations:

// This overwrites the variable - this is what you are doing 
// at the end $locations will be the one single last link 
$locations = '<a href="ht 

// This adds to/concatenates - giving you a long strong of many links 
$locations .= '<a href="ht 

     //^Note the period. 

Troisièmement, exploser prend une chaîne et il se transforme en un tableau.

Si vous faites une longue ficelle, pourquoi voudriez-vous la faire exploser de nouveau dans les pièces à partir desquelles vous l'avez construite?

Je suggère de stocker vos états, countys et liens construits dans les tableaux. Ensuite, vous pouvez utiliser le contenu de ces tableaux à volonté pour créer vos emails. Pour voir ce qu'il y a dans un tableau, utilisez print_r() ou var_dump(). Vous pouvez faire une boucle sur les tableaux avec foreach().

<?php 
$i = 0; 
while ($row = mysql_fetch_assoc($result)) { 
    $SID = $row['SID']; 
    $CID = $row['CID']; 

    $states = mysql_query("SELECT * FROM State WHERE ID = '$SID'"); 
    while ($state = mysql_fetch_array($states)) { 
     // There had better only be ONE statename per SID or you lose info!   
     $user_array[$i]['statename'] = $state['Name']; 
    } 

    $countys = mysql_query("SELECT * FROM County WHERE ID = '$CID'"); 
     while ($county = mysql_fetch_array($countys)) { 
     // There had better only be ONE countyname per CID or you lose info! 
     $user_array[$i]['countyname'] = $county['Name']; 
    } 


    $user_array[$i]['link'] = '<a href="http://hammerpins.net/display.php?state=' . $SID .' &county=' . $CID .'" >' . "{$user_array[$i]['countyname']}, {$user_array[$i]['statename']} ". '</a>'; 

    ++$i; // add one to i 
} 

// Show the arrays: 
echo "<pre>"; 
print_r($user_array); 
echo "</pre>"; 
?> 

Le vous donne ci-dessus un tableau comme

Array 
(
    [0] => Array 
     (
      [statename] => CA 
      [countyname] => San Bernardino 
      [link] => <a href="blah... 
     ) 

    [1] => Array 
     (
      [statename] => OR 
      [countyname] => Multnomah 
      [link] => <a href="yada... 
     ) 

) 

Pour utiliser le tableau juste faire

foreach ($user_array as $single_user_item) { 
    echo $single_user_item['link']; 
} 
+0

Merci, Peter Comme je l'ai mentionné plus haut à Flipper, ma première tentative fut de utilisez un tableau (ce qui explique pourquoi les lignes $ i = 0 et $ i = $ i + 1) mais je n'arrive pas à comprendre comment utiliser le tableau dans mon email. en me disant, mais si j'ai d'autres questions, puis-je leur demander –

+0

@Poder - Utiliser des tableaux est comme utiliser n'importe quelle autre variable, donc si vous pouvez utiliser $ locations dans votre email, vous devriez aussi pouvoir utiliser un tableau. [une section entière sur les tableaux dans le manuel de PHP] (http://php.net/manual/fr/language.types.array.php) Si vous rencontrez des problèmes, vous devriez probablement demander à un autre que stion De préférence avec une configuration de données fictive. Les tableaux peuvent être difficiles au début, mais une fois que vous avez compris comment accéder et manipuler les éléments d'un tableau, ils sont très utiles. –

1

vous donnera exploser tableau

$pizza = "piece1 piece2 piece3 piece4 piece5 piece6"; 
$pieces = explode(" ", $pizza); 
echo $pieces[0]; // piece1 
echo $pieces[1]; // piece2 

donc lorsque vous utilisez exploser la fonction, il va exploser chaîne pour tableau

dans votre cas .. écrire

$locals = explode("|", $locations); 
echo "<pre>";print_r($locals);echo "</pre>"; 

et vous aura une idée exacte et il va résoudre votre problème

Questions connexes