2014-05-05 80 views
0

我正在構建一個自動化的電子郵件系統,作爲我設計的會員系統的擴展。PHP刪除前導零

採取以下陣列:

array (size=5) 
    '002858' => string '<p>These members have expired:</p><p>Adults: None</p><p>Children: Florence Carline</p><p>Disabled Members: None</p>' (length=115) 
    '001974' => string '<p>These members have expired:</p><p>Adults: Kelly Hughes, Andrew Hughes</p><p>Children: Alfie Hughes</p><p>Disabled Members: None</p>' (length=134) 
    '000033' => string '<p>These members have expired:</p><p>Adults: Kate Shirley</p><p>Children: Rolsin Shirley</p><p>Disabled Members: None</p>' (length=121) 
    '000259' => string '<p>These members have expired:</p><p>Adults: Charmaine Walsh, Michael Baxter</p><p>Children: Liam Baxter, George Baxter</p><p>Disabled Members: None</p>' (length=152) 
    '000000' => string '<p>These members are expiring in a month:</p><p>Adults: Edward Selby</p><p>Children: None</p><p>Disabled Members: None</p>' (length=122) 

當我嘗試讀取陣列早在foreach循環(每封郵件一個迭代)我收到以下錯誤:

Notice: Uninitialized string offset: 1974 in C:\wamp\www\subdomains\[host]\controllers\email.class.php on line 145 

注意,這是第二個在我的陣列中,但沒有'00'。

我看過這樣的:php array behaving strangely with key value 07 & 08

所以我檢查(與is_int()) - 關鍵是一個字符串不是int。

任何人都可以爲我闡述一些這方面的信息嗎?

編輯:

創作:

foreach($email_list_array['month'] as $key => $ticket) { 

    $header[$key] = "<p>Our records indicate that your pass (ticket number: $key) is expiring or has already expired.</p>"; 
    $header[$key] .= "<p>Please see the details below</p>"; 

    if(!isset($message[$key])) { 
     $message[$key] = "<p>These members are expiring in a month:</p>"; 
    } else { 
     $message[$key] .= "<p>These members are expiring in a month:</p>"; 
    } 

    $message[$key] .= "<p>Adults: $adults</p>"; 
    $message[$key] .= "<p>Children: $children</p>"; 
    $message[$key] .= "<p>Disabled Members: $disabled</p>"; 

} 

這是我做的陣列傾倒

var_dump($message); 

測試輸出:

foreach($message as $key => $value) { 

    $message_header = $header[$key]; 
    $message = $message[$key]; 

    echo $message_header; 
    echo $message; 
    echo "<br>"; 

} 
+1

向我們展示一些代碼。如果該字符串偏移量錯誤不僅僅是巧合,那麼這意味着您將數組鍵用作「substr」或其他字符串函數的參數。 – Kryten

+0

可能看到循環代碼? – Crackertastic

+0

現在發佈它 – Edward

回答

2

更改裏面的foreach變量$消息的名稱:

$messageXXX = $message[$key]; 
echo $messageXXX; 
+0

腿端。我認爲這很簡單。 – Edward

+0

但是,如何在嘗試訪問上面顯示的數組時將整數1974轉換爲字符串「001974」? – tswaehn

+0

它不是。如果它用單引號包裝,它會看到一個字符串。它在任何時候都不會將它解釋爲一個整數。 – VikingBlooded

1

我猜這個數組是以整數而不是字符串的形式訪問的。所以你應該把整數轉換爲字符串。

請注意,整數訪問和字符串訪問是有區別的!

$arrayX = array("A", "X"); 
$arrayY = array("0012"=> "A", "0001"=>"b"); 


print_r($arrayX); 

print_r($arrayY); 

echo "array X ". $arrayX[1]; // returns "X" 
echo "array Y".$arrayY["0012"]; // returns "A" 
echo "array Y ".$arrayY[12];  // should also return "A" 

的輸出如下

Array 
(
    [0] => A 
    [1] => X 
) 
Array 
(
    [0012] => A 
    [0001] => b 
) 
XA 
Notice: Undefined offset: 12 in /test.php on line 14 

你的情況,你還需要的東西加前導零喜歡

$value = 12; // integer 
$str = sprintf("%04d",$value); // now $str = "0012" 
echo "array Y ".$arrayY[ $str ];  // now returns "A" 
+0

瞭解。我用'is_int($ key)'檢查了$ key,它返回爲一個字符串。 – Edward

+0

我會仔細檢查這 – Edward

+0

不僅將其轉換爲字符串,而且還添加領先的「0」零! – tswaehn

1

你的部分問題是你在循環中爲$message賦值,但是$message是你的輸入變量。這使得PHP正在做它正在做的事情。它也似乎是你試圖從兩個不同的數組中獲取相同的密鑰。它是否正確?

好歹看看下面的例子:

foreach($message as $key => $value) { 

    $message_header = $header[$key]; 
    $messageText = $message[$key]; 

    echo $message_header; 
    echo $messageText; 
    echo "<br>"; 

} 

這將有望表現出什麼樣的變化,你在你的測試需要阻止發生的錯誤。

+0

明白了。謝謝你們,我有隧道視野! – Edward