2014-05-05 81 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