Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP删除前导零_Php_Arrays - Fatal编程技术网

PHP删除前导零

PHP删除前导零,php,arrays,Php,Arrays,我正在建立一个自动电子邮件系统,作为我设计的会员系统的扩展 以以下数组为例: 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>' (lengt

我正在建立一个自动电子邮件系统,作为我设计的会员系统的扩展

以以下数组为例:

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)
请注意,这是数组中的第二个,但没有其“00”

我已经看过了:

所以我检查了(使用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>";

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

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

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

}
测试输出:

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>";

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

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

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

}
foreach($key=>$value的消息){
$message_header=$header[$key];
$message=$message[$key];
echo$消息头;
回声$信息;
回声“
”; }
我猜数组是作为整数而不是字符串访问的。因此,您应该将整数转换为字符串

请注意,按整数访问和按字符串访问之间存在差异

$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"

我猜数组是作为整数而不是字符串访问的。因此,您应该将整数转换为字符串

请注意,按整数访问和按字符串访问之间存在差异

$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"

更改foreach中变量$message的名称:

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

更改foreach中变量$message的名称:

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

问题的一部分是您正在为循环中的
$message
赋值,但
$message
是您的输入变量。这就是让PHP做它正在做的事情。您的用户似乎还试图从两个不同的数组中获取相同的密钥。这是正确的吗

无论如何,请看以下内容:

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

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

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

}
foreach($key=>$value的消息){
$message_header=$header[$key];
$messageText=$message[$key];
echo$消息头;
echo$messageText;
回声“
”; }

这将有望显示您在测试中需要进行哪些更改来阻止错误的发生。

部分问题在于您正在为循环中的
$message
赋值,但
$message
是您的输入变量。这就是让PHP做它正在做的事情。您的用户似乎还试图从两个不同的数组中获取相同的密钥。这是正确的吗

无论如何,请看以下内容:

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

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

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

}
foreach($key=>$value的消息){
$message_header=$header[$key];
$messageText=$message[$key];
echo$消息头;
echo$messageText;
回声“
”; }


这将有望显示您在测试中需要进行哪些更改来阻止错误的发生。

向我们展示一些代码。如果字符串偏移量错误不仅仅是巧合,那么这意味着您正在使用数组键作为
substr
或其他字符串函数的参数。可能看到循环代码吗?您正在将变量$message从数组更改为字符串:$message=$message[$key];给我们看一些代码。如果字符串偏移量错误不仅仅是巧合,那么这意味着您正在使用数组键作为
substr
或其他字符串函数的参数。可能看到循环代码吗?您正在将变量$message从数组更改为字符串:$message=$message[$key];理解。我已经用
is_int($key)
检查了$key,它以字符串形式返回。我将再次检查它,不仅将其转换为字符串,还将添加前导的“0”零!某些过程根据需要有3或4个前序Sprintf(“%04d”,…)填充为零。4表示我们需要4位数字。因此,当转换“3”时,如果你转换“444”,它将返回“0003”,它只将“0444”加一个零。明白。我已经用
is_int($key)
检查了$key,它以字符串形式返回。我将再次检查它,不仅将其转换为字符串,还将添加前导的“0”零!某些过程根据需要有3或4个前序Sprintf(“%04d”,…)填充为零。4表示我们需要4位数字。所以,当转换“3”时,如果你转换“444”,它将返回“0003”。如果你转换“444”,它只会给“0444”加一个零。我认为这很简单。但在尝试访问上面发布的数组时,如何将整数1974转换为字符串“001974”呢?事实并非如此。如果用单引号括起来,它会看到一个字符串。它在任何时候都不会将其中的内容解释为int。啊,我看到,最初它确实将“001974”解释为int being 1974,然后在访问数组时,由于缺少零而失败。但是,如果您总是使用“001974”作为字符串,它将不会被解释为int,因此数组访问很好-对吗?您在说什么?:)腿的末端。我认为这很简单。但在尝试访问上面发布的数组时,如何将整数1974转换为字符串“001974”呢?事实并非如此。如果用单引号括起来,它会看到一个字符串。它在任何时候都不会将其中的内容解释为int。啊,我看到,最初它确实将“001974”解释为int being 1974,然后在访问数组时,由于缺少零而失败。但是,如果您总是使用“001974”作为字符串,它将不会被解释为int,因此数组访问很好-对吗?您在说什么?:)知道了。谢谢你们,我有隧道视力!知道了。谢谢你们,我有隧道视力!