2011-07-30 88 views
0

我正在嘗試爲我的網站的用戶生成一個每週電子郵件,其中列出添加了新信息的位置。當有人添加信息時,一個表會收到兩個數字,一個是州,另一個是縣。我的cron工作的第一步是取數字並將它們轉換爲縣,州格式(例​​如,加利福尼亞州的阿拉米達)。在每次轉換結束時,我添加了|用作分隔符。這部分工作完美。接下來,我會遍歷每個用戶通過電子郵件發送此信息,但這部分不起作用。我最終得到的是數組,而不是我的縣,州的格式。我錯過了什麼?爆炸電子郵件數組

這是執行的第一步,這只是正常的代碼:

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

這是我使用爆炸陣列成縣,州格式,無法正常工作的代碼。相反,我得到了字數組。

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

$郵件中使用$ locals作爲新信息列表。請指向正確的方向。由於

+1

這不回答你的問題,但我還是必須說,它的數組:這可能是以更好的方式完成。拿着一個充滿元素的字符串然後爆炸它們可以用一個數組來完成。而且,這些數據也可以更高效地存儲在數據庫中。 – Flipper

+0

謝謝Flipper。實際上,我確實將它設置爲一個數組(這是$ i = 0和$ i = $ i + 1行的原因),因爲我無法想出將數組機械化到電子郵件中的方法,我改變了小河中間的馬,並採用了爆炸的方法,根據所有的評論似乎不是要走的路。 –

回答

0

首先,什麼是目的$i

其次,我想你想連接$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. 

三,爆炸確實需要一個字符串,並把它變成一個數組。

如果您製作的是長字符串,您爲什麼要將其分解爲您構建的部分?

我建議在數組中存儲你的狀態,countys和構造的鏈接。然後,您可以隨意使用這些數組的內容來創建您的電子郵件。

要看陣列中使用的是什麼,請使用print_r()var_dump()。您可以使用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>"; 
?> 

上面的給你喜歡

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

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

) 

使用數組只是做

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

謝謝,彼得。正如我上面提到的Flipper,我的第一次嘗試是使用一個數組(這就是爲什麼$ i = 0和$ i = $ i + 1行),但不能完全弄清楚如何在我的電子郵件中使用數組。我可能需要一段時間才能完全理解你是什麼告訴我,但如果我還有其他問題,我可以問問他們嗎? –

+0

@Poder - 使用數組就像使用任何其他變量,所以如果你可以在你的電子郵件中使用$位置,你應該也可以使用一個數組。 [PHP手冊中關於數組的全部內容](http://php.net/manual/en/language.types.array.php)。如果遇到問題,您應該詢問另一個問題Stion的。最好用一些虛擬數據設置。數組一開始可能會非常棘手,但一旦掌握瞭如何訪問和操作數組的元素,它們就非常有用。 –

1

爆炸會給你陣列

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

所以當你使用爆炸功能,它會在你的情況下爆炸字符串數組

..寫

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

和你將有確切的想法,它將解決您的問題